Может ли имя ViewBag совпадать с именем свойства Model в DropDownList?
Я работаю над веб-приложением ASP.NET MVC-4. Я определяю следующее в моем методе действия, чтобы построить SelectList
:
ViewBag.CustomerID = new SelectList(db.CustomerSyncs, "CustomerID", "Name");
Тогда я оказываю DropDownListFor
как следовать внутри моего View
:
@Html.DropDownListFor(model => model.CustomerID, (SelectList)ViewBag.CustomerID, "please select")
Как показано, я называю ViewBag
свойство быть равным Model
имя свойства, которое CustomerID
, Исходя из моего собственного тестирования, определение одного и того же имени не вызвало проблем или конфликтов, но стоит ли этого избегать?
2 ответа
Вы не должны использовать одно и то же имя для свойства модели и ViewBag
свойство (и в идеале вы не должны использовать ViewBag
на всех, а скорее модель представления с IEnumerable<SelectListItem>
имущество).
Когда используешь @Html.DropDownListFor(m => m.CustomerId, ....)
первый "Please Select"
Параметр всегда будет выбран, даже если значение свойства модели установлено и соответствует одному из параметров. Причина в том, что метод сначала генерирует новый IEnumerable<SelectListItem>
на основе того, который вы предоставили, чтобы установить значение Selected
имущество. Для того, чтобы установить Selected
свойство, оно читает значение CustomerID
от ViewData
и первый найденный "IEnumerable<SelectListItem>"
(не значение свойства модели) и не может сопоставить эту строку ни с одним из ваших параметров, поэтому выбирается первый параметр (потому что что-то должно быть).
Когда используешь @Html.DropDownList("CustomerId", ....)
нет data-val-*
атрибуты будут сгенерированы, и вы не получите никакой проверки на стороне клиента
Обратитесь к этому DotNetFiddle, показывая сравнение возможных вариантов использования. Только используя разные имена для свойства модели и ViewBag
свойство будет все работать правильно.
Там нет вреда, чтобы использовать его. Вы не получите никакой ошибки. но лучшая практика - связывать свойство модели.