2009-07-06 2 views
0

У меня довольно сложная ViewModel, содержащая decimal свойства, которые предоставляются пользователю в виде текстовых полей. Я хочу, чтобы текстовое поле без значения интерпретировалось как ноль. (Свойства в базовом доменном объекте не имеют значения NULL, а значение по умолчанию равно 0.)ASP.NET MVC: привязка числовых типов из пустых строк без ошибок ModelState

Когда DefaultModelBinder связывает данные вида с ViewModel, десятичные свойства с пустыми строками для входов инициализируются до нуля (как есть стандарт в .NET), но DefaultModelBinder добавляет ошибки в ModelState для пустых текстовых полей. В результате ModelState недействителен, и пользователь видит целую кучу значений «A». ошибки для текстовых полей, которые они оставили пустыми.

Как я могу остановить эти ошибки от добавления в ModelState?

ответ

1

Лучшее, что вы могли бы сделать в этой ситуации, - создать ViewModel. Вместо того, чтобы напрямую связываться с вашей моделью домена, вместо этого привязывайте к ViewModel, который был создан исключительно для целей переноса данных в ваше представление. В ViewModel вы можете создать эти поля как десятичные числа с нулевым значением. Затем вы можете сопоставить ViewModel с вашей моделью домена, как вам нравится.

Это действительно правильное поведение. Если вы не вводите ничего в TextBox, то это эквивалентно null, а не 0.

+0

Я уже использую ViewModel как объект передачи данных - я отредактирую вопрос, чтобы уточнить. Однако мне пришлось бы реорганизовать много кода, чтобы использовать десятичные числа с нулевым значением, и я надеялся избежать этого. –

+0

ViewModels не предназначены для использования в нескольких действиях. У вас должен быть новый ViewModel для каждого действия, требующего уникальных данных. Используя общие ViewModels для нескольких действий, вы обычно сталкиваетесь с такими проблемами, как тот, который вы испытываете. –