MVC 3中使用多个ViewModel的ModelState.IsValid问题

6
假设我有一个ViewModel,它由3个其他的ViewModel组成。其中一个包含一个项目列表,另一个包含具有[Required]属性的类的实例,然后是另一个项目列表。
如果用户从两个列表中的任何一个选择了一个项目,我不希望第二个对象上的[Required]属性导致ModelState无效,因为如果用户选择了其中一个项目,则他们不需要填写具有[Required]属性的项目表单。
我该如何解决这个问题?
1个回答

5

有一种选择是通过使用ModelState.Remove("KeyName")来删除“有问题”的验证。我有完全相同的情况,并已实施以下措施:

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

然而,重要的是要确保这不会对您代码中的其他区域产生连锁影响。


我认为,与其验证整个ViewModel,不如按照您的建议有选择地验证受用户选择影响的模型。此外,这让我重新思考了应用程序设计,幸运的是,我找到了一些更好的处理方法,以便这不再是一个问题。 - ewahner

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接