W przykładzie programu NerdDinner Professional ASP.NET MVC 1.0 istnieje metoda tworzenia nowej kolacji zgodnie z poniższym opisem (strona 89 bezpłatnej wersji NerdDinner).
Tam sprawdza wartość ModelState.IsValid. Wydaje się, że sprawdza, czy model jest prawidłowy dla bazy danych (to znaczy wychwytuje konwersje typów danych, takie jak daty z nieprawidłowym formatem, ale nie reguł biznesowych). Czy to prawda?
Podczas przesyłania formularza, jeśli masz błąd w dacie, ModelState.IsValid będzie fałszywe i otrzymasz błąd, ale tylko dla daty, ponieważ AddRuleViolations nigdy nie zostało wykonane. Jeśli całkowicie usuniesz czek dla ModelState.IsValid, otrzymasz wszystkie błędy (z powodu wyjątku), w tym oznaczenie daty, kiedy jest nieważne. Dlaczego więc w ogóle tam jest sprawdzenie ModelState.IsValid? Czy coś mi brakuje?
//
// 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);
}