6

讓我們只說我有一個ViewModel由3個其他ViewModel組成。一個包含項目列表,另一個包含具有[必需]屬性的類的實例,然後包含其他項目的另一個列表。MVC 3 ModelState.IsValid with multiple ViewModels

如果用戶從兩個列表中的任意一個列表中選擇一個,我不希望第二個對象上的[Required]屬性導致ModelState無效,因爲如果用戶選擇了其中一個項目他們將不需要填寫具有[必需]屬性的項目。

我該如何解決這個問題?

回答

5

一個選項是您可以使用ModelState.Remove(「KeyName」)刪除「違規」驗證。我有完全一樣的方案,並已實現了以下:

var MyModel = _someService.GetModelById(id); 
TryUpdateModel(MyModel); 
ModelState.Remove("MyModel.OffendingField"); 
if (ModelState.IsValid) 
{ 
    ... 
} 

是很重要的,雖然你要確保這不會有連鎖反應,在你的代碼的其他方面的影響。

+0

我認爲,而不是驗證整個ViewModel,我會按照您的建議和條件驗證受用戶選擇影響的模型。此外,這讓我重新思考應用程序設計,並且幸運的是我找到了一些更好的方式來處理它,所以這不是一個問題。 – ewahner 2011-04-11 12:03:58