問題タブ [modelstatedictionary]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
asp.net-mvc - コレクション プロパティの項目の ModelStateDictionary のキーを決定するもの
これが私のビューモデルの場合:
次に、ModelStateDictionary
for に割り当てられるデフォルトのエラー メッセージ キーは次のようになります。
ViewModel.SimpleProperty(以下の更新を参照)ViewModel.ComplexProperty(以下の更新を参照)ViewModel.ComplexProperty.NestedSimpleProperty(以下の更新を参照)ViewModel.ComplexPropertyArray(以下の更新を参照)- ViewModel.ComplexPropertyArray[0]
- ViewModel.ComplexPropertyArray[0].NestedSimpleProperty
更新 リフレクターでこれを見つけました:
#5 と #6を除くすべてを網羅していると思います。
asp.net - 値が ModelState に保持されないようにする
良い一日!
ASP.NET MVC は、GET/POST サイクル中に入力の値を内部に格納ModelState
し、検証エラーが発生した場合にそれらを自動的に入力に入れることで、うまく機能します。
しかし、私のフォームには、検証エラー中に保持されるべきではない CAPTCHA フィールドがあります (CAPTCHA 値はリクエストごとに再生成されます)。
設定してこれを達成しようとしました
しかし、うまくいきません。
ModelState に保存されないように、モデル フィールドに適用できる属性があるのでしょうか?
前もって感謝します!
asp.net-mvc - ModelState.IsValid が添付されたエンティティを検証できないようにしますか?
オーバーライドする方法はありますModelState.IsValid
か?
検証されるエンティティの一部は添付されたエンティティであるため、ID を除くすべてのフィールドはエンティティが状態であるため検証されませんUnchanged
。
これを行う方法はありますか?
以前にこの問題に直面した人はいますか?
アップデート
次のアクションがあるとします。
モデルは のすべてのプロパティとすべての子孫プロパティを検証するため、entity
それらの子孫の各エンティティを確認し、それがコンテキストに関連付けられているかどうかを確認し、関連付けられている場合は、ModelState
次のようにからエラーを削除する方法が必要です。
上記の疑似コードで私がやろうとしているのは、検証チェーン内のエンティティをチェックすることです。そのうちの 1 つが として添付されている場合は、Unchanged
検証をスキップしてエラーを削除します。
現在、チェックして手動でハードコーディングする必要がModelState.Key
あります。より一般的で効率的な方法を探しています。
validation - サービス層の検証チェックの代わりに ModelState / ModelStateDictionary を使用する理由は何ですか
多くのオンラインの例やチュートリアルで、if (!ModelState.IsValid) { return View(model); }
または同様のものが見られます。ModelState
各アクションの実行前に実際にそのチェックを行うフィルターを作成しました。しかし、組み込みコンポーネント モデルの属性は非常に限られています。クライアント自体で実行できるチェックのみを使用し、一意性チェックやデータベースに対する単語のフィルタリングなどは何も提供していません。サービスコマンドへの「入力モデル」をチェックし、より詳細なチェックに失敗した場合はそれをスローするためのルールを含む、私のサービスレイヤーベースへのコンパニオン。
私の質問は、マイクロソフトの控えめな AJAX HTML ヘルパーを使用していない場合、非常に基本的なコンポーネント モデルの属性を気にする理由はありますか? 結局のところ、新しいモデルを作成し、各フィールドに注釈を付け、ドメイン モデルで最新の状態に保つ必要があります。
また、を使用する利点がある場合、ModelState
サービス層の検証チェックに接続するための推奨される方法は何ですか? それとも、他の理由でこれをしない人がいますか?
asp.net-mvc-4 - MVC 4 ModelState が無効です。値を自動入力しようとしていて、新しい値を受け入れないためです。
コメント欄があります。ビューには、コメント エディター ボックスのみがあります。
モデルには、コメントがリンクされているコース、日付、コメント テキスト、およびユーザーもあります。他の値は create post メソッドに入力されます。
ここで問題が発生します。モデルは、実際に作業を行って設定する前にuserName
、値のパラメーターを使用しようとしています。courseComment.UserName
設定された後、ModelState
変更されません。
たとえば、domain\abc123
post メソッドに渡され、ModelState
for にも設定されUserName
ます。私はいくつかの作業を行い、userName
toを変更しabc123
てリンクされた ID を見つけます。ID = 1 と言って、その名前のユーザーにそれを差し込んで、courseComment.UserName
ModelState
まだそこに残しdomain\abc123
、モデルは無効のままです。
現在、これは元の作業でしたが、主に列名といくつかの関係だけで、基礎となるデータベースを変更しました。
これに対する私の解決策。
post メソッドからユーザー名を受け取って移動する
get メソッドに。
次に、ビューを次のように変更しました
helpers - この「ControllerHelpers」クラスはどこに追加すればよいですか?
かなり古い .NET チュートリアル「Nerd Dinner」では、ルール違反に対するヘルパー クラスの使用について説明しています。このクラスを参照できるようにどこに配置すればよいかわからないことを除いて、すべてが簡単に思えます。私はMVCでかなり新しいです。
以下はすべて、Nerd Dinner Tutorialからの抜粋です。
AddRuleViolations ヘルパー メソッドの使用
最初の HTTP-POST Edit 実装では、catch ブロック内で foreach ステートメントを使用して、Dinner オブジェクトのルール違反をループ処理し、それらをコントローラーの ModelState コレクションに追加しました。
「ControllerHelpers」クラスを NerdDinner プロジェクトに追加することで、このコードを少しきれいにすることができます。その中に、ASP.NET MVC ModelStateDictionary クラスにヘルパー メソッドを追加する「AddRuleViolations」拡張メソッドを実装します。この拡張メソッドは、ModelStateDictionary に RuleViolation エラーのリストを設定するために必要なロジックをカプセル化できます。
public static class ControllerHelpers {
public static void AddRuleViolations(この ModelStateDictionary modelState、IEnumerable エラー) {
} }