質問

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

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

ジャレットマイヤーのアプローチを使用しています Crewコレクションを追加、編集、および削除します。 控えめな検証を使用して、CrewのプロパティがすべてRequiredであることを指定しています。

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

クライアント側の「removeRow」メソッドを正常に調整して、論理的に削除されたアイテムの控えめな検証を無効にしました。これにより、空白のフィールドを含むアイテムがある場合でもフォームが投稿されます。

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

要約すると、私は(私が思うに)コントローラーメソッド内でViewModelを変更して問題のあるアイテムを削除し、次にある種の「再検証」を呼び出して、ModelState.IsValidをtrueとして表示させたいと思います。

何かアイデアはありますか?

役に立ちましたか?

解決

問題のあるアイテムを削除したら、次のようにModelStateをクリアして、もう一度検証します。 ジェネラコディセタグプレ

TryValidateModelメソッドを使用する場合は注意が必要です。このメソッドは、モデルのネストされたオブジェクトを検証しないためです(@Merenzoが言及)。

他のヒント

ゲームに遅れていますが、それでも: また、モデルを後で(より正確には、ネストされたコレクションのアイテムに対して)調整した後、モデルを検証する方法を探していましたが、TryValidateModelは機能しないため、機能しませんでした。ネストされたオブジェクトを処理します。

最後に、カスタムモデルバインダーで解決しました: ジェネラコディセタグプレ

モデルクラス: ジェネラコディセタグプレ

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top