2010-04-14 6 views
0

У меня есть список параметров (IEnumerable < SelectListItem>) в моей модели, которые я хочу использовать в нескольких раскрывающихся списках на моем представлении. Но в каждом из этих выпадающих меню может быть выбран другой вариант.Самый простой способ указать выбранный параметр в выпадающем списке в ASP.NET MVC

Есть ли простой способ просто specfiy, который должен быть выбран при использовании помощника Html.DropDownList?

На данный момент, единственный способ, которым я могу видеть это, чтобы генерировать HTML-сам и цикл по списку опций, как так:

<% for(int i=0; i<10; i++) { %> 
    <select name="myDropDown<%= i %>"> 
     <% foreach(var option in Model.Options) { %> 
     <option value="<%= Html.Encode(option.optValue) %>" <%if(ShouldBeSelected(i)) {%> selected="selected"<% } %>><%= Html.Encode(option.optText) %></option> 
     <% } %> 
    </select> 
<% } %> 

ответ

3

Html.DropDownList() принимает SelectList в качестве параметра, который имеет свойство SelectedValue. Укажите выбранный элемент при создании SelectList и передайте SelectList в Html.DropDownList().

-1

Вот пример, который содержит 7 выпадающих страниц, каждый из которых имеет те же 5 опций. У каждого выпадающего списка может быть выбран другой вариант.

На мой взгляд, у меня есть следующий код внутри моей формы:

<%= Html.DropDownListFor(m => m.ValueForList1, Model.AllItems)%> 
<%= Html.DropDownListFor(m => m.ValueForList2, Model.AllItems)%> 
<%= Html.DropDownListFor(m => m.ValueForList3, Model.AllItems)%> 
<%= Html.DropDownListFor(m => m.ValueForList4, Model.AllItems)%> 
<%= Html.DropDownListFor(m => m.ValueForList5, Model.AllItems)%> 
<%= Html.DropDownListFor(m => m.ValueForList6, Model.AllItems)%> 
<%= Html.DropDownListFor(m => m.ValueForList7, Model.AllItems)%> 

Тогда у меня ViewModel как это:

public class HomePageViewModel 
{ 
    public List<SelectListItem> AllItems { get; set; } 

    public string ValueForList1 { get; set; } 
    public string ValueForList2 { get; set; } 
    public string ValueForList3 { get; set; } 
    public string ValueForList4 { get; set; } 
    public string ValueForList5 { get; set; } 
    public string ValueForList6 { get; set; } 
    public string ValueForList7 { get; set; } 

    public HomePageViewModel() 
    { 
     AllItems = new List<SelectListItem> 
     { 
      new SelectListItem {Text = "First", Value = "First"}, 
      new SelectListItem {Text = "Second", Value = "Second"}, 
      new SelectListItem {Text = "Third", Value = "Third"}, 
      new SelectListItem {Text = "Fourth", Value = "Fourth"}, 
      new SelectListItem {Text = "Fifth", Value = "Fifth"}, 
     }; 
    } 
} 

Теперь в методе контроллера, объявленный как это:

 public ActionResult Submit(HomePageViewModel viewModel) 

Значение для viewModel.ValueForList1 будет установлено на выбранное значение.

Конечно, я бы предложил использовать какое-либо перечисление или идентификаторы из базы данных в качестве вашей ценности.

1

класс 'Item' со свойствами 'Id' и 'Имя'
ViewModel класс имеет свойство 'SelectedItemId'
пунктов = IEnumerable < Пункт >

<%=Html.DropDownList("selectname", items.Select(i => new SelectListItem{ Text = i.Name, Value = i.Id.ToString(), Selected = Model.SelectedItemId.HasValue ? i.Id == Model.SelectedItemId.Value : false })) %>