Прежде всего некоторый контекст :
У меня есть форма, где я отправляю обратно некоторые объекты, которые автоматически материализуются в объекты встроенным в ModelBinder MVC:
<input type="hidden" name="myobj[0].Id" />
<input type="text" name="myobj[0].Hours" />
<input type="hidden" name="myobj[1].Id" />
<input type="text" name="myobj[1].Hours" />
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Save(IList<MyObject> myobj);
Дополнительно: я хотел бы подчеркнуть, что мы публикуем в DTO (DataTransferObjects), что мы далее спускаем линейную карту в сущности каркаса сущностей, поэтому нам не хотелось бы ничего менять в DTO, кроме, возможно, добавления атрибутов.
Задача
Если пользователь вводит недопустимое значение для «Часов», скажем, «Fubar», то ModelBinder, естественно, не будет пытаться установить свойство «Часов». Но по умолчанию это 0, потому что это int , а не string .
Это вызывает некоторые трудности для меня, потому что теперь я не вижу, действительно ли пользователь ввел 0 или это было вызвано неправильным вводом.
Поскольку я использую сопоставленный объект-объект (Entity Framework), мы не можем изменить отпечаток свойства 'Hours' на int? . Мне известно, что в MVC есть некоторые встроенные средства проверки, но мы бы не стали реализовывать это, поскольку знаем, что он подвергся дикой атаке, и что в ASP.NET MVC 2.0 появилась новая проверка.
Решение
Мне нужно иметь возможность указать пользователю, какое поле является неправильным, так что это означает, что мне как-то нужно быть в состоянии перехватить исключение (или, возможно, какое-нибудь другое гениальное решение?), Где я могу сделать некоторую логику и опубликовать верните новый вид пользователю, где я укажу, что они сделали неправильно.
Моя текущая идея: написание собственного ModelBinder.
Что вы предлагаете?