Отказ от проверки города после выбора состояния с использованием каскадного раскрывающегося списка в MVC5 Razor [duplicate]

Я использую следующее, чтобы включить все отчеты об ошибках для MySQLi

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

* ПРИМЕЧАНИЕ: не используйте это в рабочей среде.

9
задан Winter 2 May 2017 в 17:06
поделиться

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

11
ответ дан Stephen Muecke 15 August 2018 в 16:42
поделиться
  • 1
    хорошо, ты прав – teo van kot 11 May 2016 в 13:35
  • 2
    Ошибка в скрипке, когда я нажимаю кнопку отправки. В нем говорится: «Элемент ViewData, который имеет ключ« CustomerA », имеет тип« System.Int32 », но должен иметь тип« IEnumerable & lt; SelectListItem & gt; ». & Quot; – Saurabh 24 July 2017 в 08:12
  • 3
    @Saurabh. Это потому, что я не перезаписывал SelectLists в методе POST, прежде чем возвращать представление (в соответствии с методом GET), но это не значит, что скрипка - это показать, что вы не можете получить правильную двухстороннюю привязка и / или проверка, если одно и то же имя используется для свойства вашей привязки и SelectList (и если вы хотите получить более подробную информацию об этой ошибке, обратитесь к этому вопросу / ответу – Stephen Muecke 24 July 2017 в 08:16

Нет вреда для его использования. Вы не получите никакой ошибки. но лучше всего использовать свойство модели.

1
ответ дан CrazyDev 15 August 2018 в 16:42
поделиться
  • 1
    @ US3-57384 вы можете придумать больше? – john G 11 May 2016 в 11:36
  • 2
    Посмотрите, что я использую в своем коде. которые решают вашу проблему и прекрасно работают. (IEnumerable & л; SelectListItem & GT;) ViewBag.RT – CrazyDev 11 May 2016 в 11:42
Другие вопросы по тегам:

Похожие вопросы: