58

編集- MVC4 Dev Preview を使用しています....

FishingTripクラス の編集ページを実装しています。単純なオブジェクト (FishingTripID、CrewID、CrewPosition など) FishingTripの子コレクションが含まれます。Crew

コレクションの追加、編集、および削除には、Jarrett Meyer のアプローチを使用していCrewます。目立たない検証を使用して、のプロパティCrewが allであることを指定していますRequired

私の問題:リストからアイテムを論理的に削除するとき(ジャレットの方法に従って)、そのアイテムを検証したくありません。

クライアント側の「removeRow」メソッドを微調整して、論理的に削除されたアイテムの目立たない検証を無効にすることに成功しました。これにより、空白のフィールドを含むアイテムがあってもフォームが投稿されます。

私のコントローラーメソッド[HttpPost] EditModelState.IsValidは、false として開始されます (予想どおり - 空白のフィールドを含む論理的に削除されたアイテムのため) ModelState.IsValid

ModelState.IsValid要約すると、コントローラーメソッド内でViewModelを変更して問題のあるアイテムを削除し、何らかの「再検証」を呼び出して、trueとして表示したいと思います。

何か案は?

4

2 に答える 2

140

問題のあるアイテムを削除したら、ModelState をクリアして、次のように再度検証します。

ModelState.Clear();
TryValidateModel(crew);  // assumes the model being passed is named "crew"

TryValidateModelこのメソッドはモデルのネストされたオブジェクトを検証しないため、メソッドを使用するときは注意してください(@Merenzoが述べたように)。

于 2011-10-20T14:08:56.580 に答える