На примере NerdDinner Professional ASP.NET MVC 1.0 есть метод для создания нового обеда в виде скопированного ниже (стр. 89 бесплатной версии NerdDinner).
Там он проверяет ModelState.IsValid на true. Кажется, он проверяет, является ли модель действительной для базы данных (то есть она улавливает преобразования типов данных, например даты с недопустимым форматом, но не бизнес-правила). Это правда?
При отправке формы, если у вас есть ошибка в дате, ModelState.IsValid будет иметь значение false, и вы получите ошибку, но только для даты, потому что AddRuleViolations никогда не выполнялась. Если вы полностью удалите проверку ModelState.IsValid, вы получите все ошибки (из-за исключения), включая отметку в дате, когда она недействительна. Тогда зачем вообще проверять ModelState.IsValid? Я что-то упускаю?
//
// POST: /Dinners/Create
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create(Dinner dinner) {
if (ModelState.IsValid) {
try {
dinner.HostedBy = "SomeUser";
dinnerRepository.Add(dinner);
dinnerRepository.Save();
return RedirectToAction("Details", new {id = dinner.DinnerID });
} catch {
ModelState.AddRuleViolations(dinner.GetRuleViolations());
}
}
return View(dinner);
}
источник
var errors = ModelState.Values.SelectMany(v => v.Errors);
с точкой останова для просмотра любых вопросов проверки.Из опечаток:
ModelState.AddRuleViolations(dinner.GetRuleViolations());
Должно быть:
ModelState.AddModelErrors(dinner.GetRuleViolations());
Ссылка: http://www.wrox.com/WileyCDA/WroxTitle/Professional-ASP-NET-MVC-1-0.productCd-0470384611,descCd-ERRATA.html
источник
AddModelErrors
метод не существует.ModelState.AddModelErrors()
метод существуетModelState.AddModelError
метод.Да, Джаред и Келли Орр правы. Я использую следующий код, как в редактировании исключения.
вместо того
источник
Все поля модели, которые имеют определенные типы, должны быть проверены при возврате в Controller. Если какое-либо из полей модели не соответствует их определенному типу, то ModelState.IsValid вернет false. Потому что эти ошибки будут добавлены в ModelState.
источник