2015-08-20 4 views
1

у меня с простой ниспадающее меню, которое отображается с:DropDownListFor SelectedItem не работает должным образом

@Html.DropDownListFor(m => m.Request.Value, new SelectList(items, "Value", "Text", selectedElement), new {}) 

, где Model.Request.Value имеет тип int и имеет значение, установленное в -1. items построен как:

var items = new List<SelectListItem<int>>(); 

items.Add(new SelectListItem<int>{Text = "10", Value = 10}); 
items.Add(new SelectListItem<int>{Text = "25", Value = 25}); 
items.Add(new SelectListItem<int>{Text = "100", Value = 100}); 
items.Add(new SelectListItem<int>{Text = "All", Value = -1}); 

Значение selectedElement 25, который имеет тип int. Тем не менее, он всегда отображает выбор с помощью All, что означает значение = -1.

Почему? И почему существует значение selectedElement, которое становится переопределенным независимо от того, что?

ответ

0

Ваш сильно привязки к свойству в модели, поэтому его значение свойства, которое определяет, что . Вот как работает привязка модели. Если вы хотите выбрать "All", установите значение Request.Value = -1

4-й параметр конструктора SelectList игнорируется при привязке к объекту. Единственный раз, когда он уважал, если бы вы использовали что-то вроде @Html.DropDownList("NotAPropertyOfMyModel, new (SelectList(...

Side Примечание: items является IEnumerable<SelectListItem> (что метод DropDownListFor() требует), чтобы создать новый IEnumerable<SelectListItem> (что SelectList есть) просто бессмысленно экстра накладные расходы. Ваше мнение должно быть только

@Html.DropDownListFor(m => m.Request.Value, items) 
0

DropDownListFor использует значение лямбда-выражения для выбора элемента в раскрывающемся списке, а не последнего аргумента конструктора SelectList.

Я считаю, что следующая ссылка содержит пример кода, который должен быть в состоянии помочь вам:

MVC DropDownList SelectedValue not displaying correctly