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