2015-10-23 29 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