Самый простой способ указать выбранную опцию в выпадающем списке в ASP.NET MVC - PullRequest
0 голосов
/ 15 апреля 2010

У меня есть список параметров (IEnumerable ) в моей модели, которые я хочу использовать в нескольких раскрывающихся списках в моем представлении. Но каждый из этих выпадающих списков может иметь разные выбранные опции.

Есть ли простой способ указать, какой должен быть выбран при использовании помощника 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 ]

3 голосов
/ 15 апреля 2010

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

1 голос
/ 15 апреля 2010

класс 'Item' со свойствами 'Id' и 'Name'
Класс 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 })) %>
0 голосов
/ 15 апреля 2010

Вот пример с 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)%>

Тогда у меня есть такая модель просмотра:

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 будет установлено на выбранное значение.

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

...