Professional ASP.NET MVC 1.0のNerdDinnerの例では、次のように新しいディナーを作成する方法があります (無料の NerdDinner バージョンの 89 ページ)。
そこで、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);
}