Я использую следующее, чтобы включить все отчеты об ошибках для MySQLi
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
* ПРИМЕЧАНИЕ: не используйте это в рабочей среде.
Вы не должны использовать одно и то же имя для свойства модели и свойство 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
все будет работать правильно.
Нет вреда для его использования. Вы не получите никакой ошибки. но лучше всего использовать свойство модели.
SelectLists
в методе POST, прежде чем возвращать представление (в соответствии с методом GET), но это не значит, что скрипка - это показать, что вы не можете получить правильную двухстороннюю привязка и / или проверка, если одно и то же имя используется для свойства вашей привязки иSelectList
(и если вы хотите получить более подробную информацию об этой ошибке, обратитесь к этому вопросу / ответу – Stephen Muecke 24 July 2017 в 08:16