4
NerdDinnerのASP.NET MVCで有効なModelState.IsValidとは何ですか?
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); }