コントローラメソッド内で変更されたViewModelを再検証しますか?
-
27-10-2019 - |
質問
編集 -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
は機能しないため、機能しませんでした。ネストされたオブジェクトを処理します。
最後に、カスタムモデルバインダーで解決しました: ジェネラコディセタグプレ
モデルクラス: ジェネラコディセタグプレ