ASP.MVC 4 DefaultModelBinder завершается ошибкой при привязке пустой строки к списку

Так что если вы отправляете пустую строку в контроллер, как это

<input type="text" value="" name="idList">

и попробуйте привязать его к списку очень странных вещей происходит

Кто-нибудь сталкивался с этой проблемой?

Почему он добавляет значение int по умолчанию в список?

1 ответ

Решение

Нет, это не странно и не неожиданно. Проблема в том, что вы не понимаете разницу между ссылочным типом (строка) и типом значения (int) и их значениями по умолчанию.

Int не может быть нулевым и всегда должен иметь значение. В этом случае связыватель модели пытается преобразовать пустую строку в ваш список и терпит неудачу, поэтому он создает значение "по умолчанию" для типа, которое для int равно 0 (поскольку оно не может быть нулевым). Привязка модели всегда использует значение по умолчанию для типа, если оно не преобразуется, что для пустых типов равно нулю, но для типов значений это то, чем является значение по умолчанию.

Одновременно в вашем ModelState.Errors должна быть помещена ошибка, информирующая вас об этой ошибке. Если вы хотите null, тогда вам нужен List nullable int.

Другие вопросы по тегам