MVC DropDownListFor() Выбранный элемент не выбран/требуется Проверка не выполняется
У меня возникли проблемы с получением моего DropDownList, чтобы установить выбранный элемент в значение из модели.
Поле в модели - это просто строка для названия имени пользователя (Mr, Miss и т.д.). Ниже приведен мой код.
<td>
@{ var list = new List<SelectListItem>(new[] {
new SelectListItem{ Selected = string.IsNullOrEmpty(Model.Title), Text="",Value=""},
new SelectListItem{ Selected = Model.Title.Equals("Mr"), Text="Mr",Value="Mr"},
new SelectListItem{ Selected = Model.Title.Equals("Mrs"), Text="Mrs",Value="Mrs"},
new SelectListItem{ Selected = Model.Title.Equals("Miss"), Text="Miss",Value="Miss"},
new SelectListItem{Selected = Model.Title.Equals("Ms"), Text="Ms",Value="Ms"}
});
}
@Html.DropDownListFor(m=>m.Title, list)
</td>
Ответы
Ответ 1
Итак, получается, что единственная причина, по которой он не работает, - это то, что мое имя поля - Title, я изменил его на Prefix и мой точный код работает. Слишком много времени, потраченного на то, чтобы выяснить это...
Вот рабочий код.
<td>
@{ var list = new List<SelectListItem>(new[] {
new SelectListItem {
Selected = string.IsNullOrEmpty(Model.Prefix),
Text="",
Value=""
},
new SelectListItem {
Selected = Model.Prefix.Equals("Mr"),
Text="Mr",
Value="Mr"
},
new SelectListItem {
Selected = Model.Prefix.Equals("Mrs"),
Text="Mrs",
Value="Mrs"
},
new SelectListItem {
Selected = Model.Prefix.Equals("Miss"),
Text="Miss",
Value="Miss"
},
new SelectListItem {
Selected = Model.Prefix.Equals("Ms"),
Text="Ms",
Value="Ms"
}
});
}
@Html.DropDownListFor(m => m.Prefix, list)
</td>
Ответ 2
У меня была эта проблема с MVC 3, и оказалось, что я установил ViewBag.Title в моем представлении (используя его для названия страницы). Как только я изменил его на ViewBag.PageTitle, код выпадающего списка начал работать: @Html.DropDownListFor(model => model.Title, Model.MySelectList)
Причиной этого является то, что в MVC 2/3 любые свойства ViewBag/ViewData с тем же именем, что и в объекте Model, используются в предпочтении в DropDownListFor()
, поэтому вам нужно переименовать их, чтобы убедиться, что они не конфликтуют. Поскольку это кажется действительно flaky, я просто прекратил использовать ViewBag полностью и теперь полагаюсь только на View Model для передачи материала в представление.
Причина, по которой эта проблема настолько распространена, заключается в том, что ViewBag.Title используется во многих вводных учебниках и демонстрационном коде для установки элемента заголовка HTML и поэтому неизбежно принимается как "лучшая практика", подход. Тем не менее, Заголовок является естественным именем свойства модели для использования в выпадающих списках в представлении "Сведения о пользователе".