我们假设我有一个由3个其他ViewModel组成的ViewModel。一个包含项目列表,另一个包含具有[Required]属性的类的实例,然后包含另一个项目列表。
如果用户从两个列表中的任何一个列表中选择一个项目,我不希望第二个对象上的[Required]属性导致ModelState无效,因为如果用户选择其中一个项目,不需要使用[必需]属性的项目填写表单。
我该如何解决这个问题?
答案 0 :(得分:5)
一个选项是使用ModelState.Remove(“KeyName”)删除“违规”验证。我有完全相同的情况,并实施了以下内容:
var MyModel = _someService.GetModelById(id);
TryUpdateModel(MyModel);
ModelState.Remove("MyModel.OffendingField");
if (ModelState.IsValid)
{
...
}
尽管您确保在代码的其他区域不会产生连锁反应,但这很重要。