2015-10-23 2 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()') Просто создайте свой собственный класс с помощью 3 свойства для 'ID1',' ID2' и 'Text' –

ответ

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

Modify модель как

[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

Hi Mikhail! Спасибо, не поймите меня неправильно, я поставил ответ Джулио как правильный, потому что он был самым быстрым и полным. – Patrick

0

Возможно, это не самый лучший вариант, но вам может использовать либо ретранслятор. Или вместо этого используйте литерал непосредственно с кодом HTML.

класс:

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

ретранслятор:

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

использование ретранслятора в Page_Load:

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

Или буквальный -> затем в C# создать полную строку <ul><li> путем для? для каждого? в то время как? и сена на личную внутреннюю страницу.

+0

Привет, спасибо за вашу помощь, но я предпочитаю ответ Джулио, потому что он основан на MVC и ближе к моему коду. – Patrick

Смежные вопросы