0

私は現在、MVC 3のプロジェクトに取り組んでおり、Entity Frameworkを利用して、それぞれが1つのHTMLフォームを含む2つのビューに1つのデータモデルを永続化しています(ウィザードベースの設計と同様)。

ただし、ユーザーが最初のビューで適切なフィールドに入力してフォームを送信すると、モデル全体のクライアント側の検証がトリガーされ、2番目のビューがインスタンス化されるまで入力に使用できないフィールドの検証エラーが表示されます。

現在、最初のビューのクライアント側の検証を完全にオフにする回避策を実装していますが、まったく検証されていないデータをモデルに入力するという考えには確かに熱心ではありません。これは悪いです。わかった。

最初のビューのフィールドを部分的に検証し、データモデル全体の検証をトリガーしない方法はありますか?

4

3 に答える 3

0

すべての入力に感謝します。しかし、非常に簡単な方法で解決策を得ることができました。最初のビューの HttpPost 要素に次のコードを配置することにより...

if (ModelState.IsValidField("FirstField") && ModelState.IsValidField("SecondField")) return RedirectToAction ("NameOfAction", model); else return View();

...部分的なフィールド検証を達成できました。ただし、このフィールド固有のアプローチは、最初のビューの [送信] ボタンにクラス「キャンセル」があり、(最初のビューに存在しないフィールドに対して) 生成された追加の検証エラーが上記の前に手動でクリアされている場合にのみ機能します。 if ステートメント。これを行うには、次を使用します。

ModelState["FieldName"].Errors.Clear();

アーキテクチャに大きな変更はありません。部分的なビューはありません。検証されていないデータを引き渡すことはありません。

非常にうまく機能します...

注: 2 番目のビューが検証エラーで読み込まれる場合は、次を使用します。

ModelState.Clear();

2 番目のビューが最初に呼び出されるアクションで。これにより、2 番目のビューの読み込みはクリーンでエラーがなくなりますが、最終的なフォームの送信時に検証エラーが引き続き表示されます。

于 2012-06-12T14:42:20.943 に答える
0

そこで登場するのが ViewModel です。ドメイン モデルをビューに直接バインドする代わりに、ビュー モデルを作成してビューにバインドする必要があります。

于 2012-06-11T15:36:32.717 に答える
0

EF モデルに直接検証を行う必要がない場合は、必要に応じてMetadataTypeを使用して部分的な検証を行うことができます。ここで、stackoverflowにある私の長い例を見てください。

于 2012-06-11T16:03:15.520 に答える