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);
}