NerdDinnerの例では、Professional ASP.NET MVC 1.0という名前の新しいディナーを作成しました(無料のNerdDinnerバージョンの89ページ)。NerdDinnerのASP.NET MVCで有効なModelState.IsValidとは何ですか?
そこで、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);
}
ブラッド場合DataAnnotations「で飾られているモデルを見つけるためにどのような方法がありますのIsValid "ModelStateなし。 (例えば、オブジェクトがファイルからロードされたりコンソールアプリケーションなどで使用されているとします。 –
いいえ、ModelState.IsValidはモデルバインド中に検証(またはデータ変換)エラーがあったかどうかを知る唯一の方法です。 –
@ブラッド、「あなたが使っている検証システムに基づいてModelStateをより完全に埋めることができる」と言えば、それはどのように達成されますか? ViewModelのModelState検証コードをクラック・オープンする方法はありますか?私はEF4を使用しているので、私の妥当性確認のほとんどは、自動的にすぐに使用できます。 – WEFX