[解決済み] NerdDinnerでASP.NET MVCでModelState.IsValidは何のために有効なのか?
2022-05-04 10:37:24
質問
について NerdDinner 例 プロフェッショナル ASP.NET MVC 1.0 のように、新しいディナーを作成するメソッドがあります(無料版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);
}
解決方法は?
ModelState.IsValid
にモデルエラーが追加されているかどうかを知らせます。
ModelState
.
デフォルトのモデルバインダーは、基本的な型変換の問題に対していくつかのエラーを追加します (例えば、"int" であるものに非数値を渡す場合)。あなたが使用している検証システムに基づいて、ModelStateをより完全に入力することができます。
サンプル
DataAnnotations
モデルバインダーは、モデルの状態を
DataAnnotations
属性を使用します。
関連
-
[解決済み] 有効なメールアドレスの最大長を教えてください。
-
[解決済み] ファイルアップロード ASP.NET MVC 3.0
-
[解決済み] ASP.NET MVC Frameworkで複数のサブミットボタンを処理する方法は?
-
[解決済み] ASP.NET MVCでenumからドロップダウンリストを作成するにはどうすればよいですか?
-
[解決済み] ASP.NET MVC - カスタムIIdentityまたはIPrincipalの設定
-
[解決済み] ASP.NET MVCでビューをコンパイルする
-
[解決済み] ELMAHをASP.NET MVCの[HandleError]属性で動作させる方法は?
-
[解決済み] ASP.Net MVCのmodelStateからすべてのエラーを取得する方法は?
-
[解決済み] MVCにおけるViewModelとは?
-
[解決済み] MVCとRazorにおけるHtml.TextboxForとHtml.EditorForの相違点
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】同じキーのアイテムがすでに追加されています。
-
[解決済み] データベースに 'AspNetRoles' という名前のオブジェクトがすでに存在します。
-
[解決済み] OwinStartupが起動しない
-
[解決済み] ASP.NET MVCにおけるApiControllerとControllerの相違点
-
[解決済み】1つのビューに複数のモデルを表示する
-
[解決済み】MVCアプリケーションでデータをキャッシュする方法
-
[解決済み] mvc 4 で部分ビューにパラメータを渡すにはどうすればよいですか?
-
[解決済み] ASP.NET MVCのモデルでUrlHelperを呼び出す
-
[解決済み] エリア間のRedirectToAction?
-
[解決済み] Visual Studio 2012 または Visual Studio 2013 で古い MVC プロジェクトを開くにはどうすればよいですか?