Asp.net-Mvc

在控制器方法中重新驗證修改後的 ViewModel?

  • October 20, 2011

編輯- 我們正在使用 MVC4 Dev Preview….

我正在為一個FishingTrip類實現一個編輯頁面。 FishingTrip包含簡單Crew對象的子集合(即 FishingTripID、CrewID、CrewPosition)。

我正在使用Jarrett Meyer 的方法Crew集合中添加、編輯和刪除。我正在使用不顯眼的驗證來指定 的屬性Crew都是Required.

我的問題:當我從列表中邏輯刪除一個項目時(根據 Jarrett 的方法),我不希望驗證該項目。

我已經成功地調整了客戶端上的“removeRow”方法,以禁用對邏輯刪除項目的不顯眼驗證,這樣即使有一個項目包含空白欄位,表單也會發布。

在我的控制器方法[HttpPost] Edit中,ModelState.IsValid以 false 開始(正如預期的那樣 - 因為邏輯刪除的項目包含空白欄位。)所以我從我的 ViewModel 中刪除了該項目……但ModelState.IsValid仍然是錯誤的。

總之,我(想我)想在控制器方法中修改我的 ViewModel 以刪除有問題的項目,然後呼叫某種“重新驗證”,並ModelState.IsValid顯示為 true。

有任何想法嗎?

刪除違規項目後,清除 ModelState 並再次驗證,如下所示:

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

注意:使用方法時要小心,TryValidateModel因為此方法不驗證模型的嵌套對象(如@Merenzo 所述)。

引用自:https://stackoverflow.com/questions/7833396