На пример NerdDinner Профессиональный ASP.NET MVC 1.0 есть способ создать новый обед как скопированный ниже (страница 89 бесплатной версии NerdDinner).
Там он проверяет ModelState.IsValid для true. Кажется, проверяет, действительна ли модель для базы данных (то есть, она перехватывает преобразования типа данных, например, даты с недопустимым форматом, но не бизнес-правила). Это правда?
При отправке формы, если у вас есть ошибка в дате, ModelState.IsValid будет ложным, и вы вернете ошибку, но только для даты, потому что 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);
}