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