6

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

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

我怎么解决这个问题?

4

1 回答 1

5

一种选择是让您使用 ModelState.Remove("KeyName") 删除“违规”验证。我有完全相同的场景并实现了以下内容:

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

重要的是要确保这不会对代码的其他区域产生连锁反应。

于 2011-04-08T08:02:23.057 回答