具有多个ViewModel的MVC 3 ModelState.IsValid

时间:2011-04-06 03:21:58

标签: model-view-controller asp.net-mvc-3 viewmodel modelstate

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

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

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:5)

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

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

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