2015-10-23 32 views
0

多個值,我需要建立一個選擇列表值是這樣的:的SelectList使用C#

<ul id="sch-brand-dropdown"> 
    <li data-id="1" data-id2="11">text1</li> 
    <li data-id="2" data-id2="12">text2</li> 
    <li data-id="3" data-id2="13">text3</li> 
</ul> 

對於一個值,我用下面的方法:

public static IEnumerable<SelectListItem> DropDownList() 
{ 
    var brandServices = new BrandService(); 

    var brandsDTO = brandServices.GetAll().OrderBy(b => b.Name); 

    var brandsList = brandsDTO.Select(brand => 
     new SelectListItem 
     { 
      Value = brand.Id.ToString(), 
      Text = brand.Name 
     }); 

    return brandsList; 
} 

是以品牌型號:

[Table("Brands")] 
public class Brand 
{ 
    [Key] 
    public int Id { get; set; } 
    public string Name { get; set; } 
} 

即我存在於這樣的看法:

<ul id="sch-brand-dropdown"> 
    @foreach (var brand in Model.BrandList) 
    { 
     <li data-id="@brand.Value">@brand.Text</li> 
    } 
</ul> 
+0

是什麼問題? –

+0

嗨,問題是我如何建立一個2值和1文本的選擇列表 – Patrick

+0

不要使用'IEnumerable '(即用於@ Html.DropDownListFor()'方法)只需創建自己的類'ID1','ID2'和'Text'的3個屬性 –

回答

1

也許改變DROPDOWNLIST方法的返回類型:

public static IEnumerable<MultValoredItem> DropDownList() 
{ 
    var brandServices = new BrandService(); 

    var brandsDTO = brandServices.GetAll().OrderBy(b => b.Name); 

    var brandsList = brandsDTO.Select(brand => 
    new MultValoredItem 
    { 
     Value1 = brand.Id.ToString(), 
     Value2 = //Another value here 
     Text = brand.Name 
    }); 

    return brandsList; 
} 

public class MultValoredItem 
{ 
    public int Value1 { get; set; } 
    public int Value2 { get; set; } 
    public string Text { get; set; } 
} 

<ul id="sch-brand-dropdown"> 
    @foreach (var brand in Model.BrandList) 
    { 
    <li data-id1="@brand.Value1" data-id2="@brand.Value2">@brand.Text</li> 
    } 
</ul> 
+0

嗨,謝謝!我可以問你,請把你的例子應用到視圖中嗎? – Patrick

+0

再次感謝Júlio,我已經把你的答案設置爲正確的,因爲它是最快和最完整的一個:) – Patrick

3

修改你的模型像

[Table("Brands")] 
public class Brand 
{ 
    [Key] 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public int Value1 { get; set; } 
    public int Value2 { get; set; } 
} 

,並使用

<ul id="sch-brand-dropdown"> 
    @foreach (var brand in Model.BrandList) 
    { 
     <li data-id="@brand.Value1" data-id2="@brand.Value2">@brand.Text</li> 
    } 
</ul> 
+0

嗨米哈伊爾!謝謝,不要誤解我的意思,我已經將Júlio的答案設置爲正確的,因爲它是最快和最完整的答案。 – Patrick

0

也許這是不是最好的選擇,但你可以使用中繼器。或者直接使用HTML代碼直接使用文字。

類:

public class Brand 
{ 
    [Key] 
    public int Id { get; set; } 
    public int IdCATEGORY { get; set; } 
    public string Name { get; set; } 
} 

中繼器:在Page_Load中

<asp:Repeater ID="Repeater" runat="server" > 
    <ItemTemplate> 
    <li data-id="<%# Eval("id") %>" data-id2="<%# Eval("idCATEGORY") %>"><%# Eval("text") %></li> 
</ItemTemplate> 
</asp:Repeater> 

使用中繼器:

Repeater.DataSource = data_Brand; 
Repeater.DataBind(); 

或文字 - >然後在C#創建爲<ul><li>滿弦?的foreach?而?並傳遞到頁面內的文字。

+0

嗨,感謝您的幫助,但我更喜歡Júlio的答案,因爲它基於MVC,更接近我的代碼。 – Patrick