Model view controller MVC 3 ModelState.IsValid对多个ViewModels有效

Model view controller MVC 3 ModelState.IsValid对多个ViewModels有效,model-view-controller,asp.net-mvc-3,viewmodel,modelstate,Model View Controller,Asp.net Mvc 3,Viewmodel,Modelstate,假设我有一个ViewModel,它由3个其他ViewModel组成。一个包含项目列表,另一个包含具有[Required]属性的类的实例,然后是其他项目的另一个列表 如果用户从两个列表中的任何一个项目中选择,我不希望第二个对象上的[Required]属性导致ModelState无效,因为如果用户选择其中一个项目,他们将不需要使用具有[Required]属性的项目填写表单 如何解决此问题?一个选项是使用ModelState.remove(“KeyName”)删除“违规”验证。我有完全相同的场景,并实

假设我有一个ViewModel,它由3个其他ViewModel组成。一个包含项目列表,另一个包含具有[Required]属性的类的实例,然后是其他项目的另一个列表

如果用户从两个列表中的任何一个项目中选择,我不希望第二个对象上的[Required]属性导致ModelState无效,因为如果用户选择其中一个项目,他们将不需要使用具有[Required]属性的项目填写表单


如何解决此问题?

一个选项是使用ModelState.remove(“KeyName”)删除“违规”验证。我有完全相同的场景,并实现了以下内容:

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

但是,确保这不会在代码的其他区域产生连锁反应,这一点很重要。

我认为,我不会验证整个ViewModel,而是按照您的建议,有条件地验证受用户选择影响的模型。此外,这让我重新思考了应用程序的设计,谢天谢地,我找到了一些更好的方法来处理它,从而减少了问题。