我在我的项目中使用了from属性验证。
[Required(ErrorMessage = "DepartmentCode is Required")]
public string DepartmentCode { get; set; }
在某些情况下,DepartmentCode并不是必需的。在我的情况下,我如何动态地忽略验证?
我在我的项目中使用了from属性验证。
[Required(ErrorMessage = "DepartmentCode is Required")]
public string DepartmentCode { get; set; }
请查看:动态删除C#属性
无论如何,我认为正确的解决方案是从RequiredAttribute
继承一个属性并覆盖Validate()
方法(这样您就可以检查该字段是否需要)。如果您想保持客户端验证工作,请检查CompareAttribute
实现。
与其动态添加和删除验证,不如创建一个更好地实现此目的的属性。
下面的文章演示了这一点(包括客户端验证的MVC3): http://blogs.msdn.com/b/simonince/archive/2011/02/04/conditional-validation-in-asp-net-mvc-3.aspx
我在模型中解决了这个问题,在某些情况下可能不是理想的解决方案,但它是最便宜和最快速的方法。
public string NonMandatoryDepartmentCode
{
get
{
return DepartmentCode;
}
set
{
DepartmentCode = value;
}
}
当我继承了一个包含我想要覆盖的属性的基础模型时,我使用了这种方法来处理MVC。
我建议你从模型中移除 RequiredAttribute,并在控制器中检查它,以便与导致其不必需的任何内容进行比较。
如果它是必需的,但值未填写,则手动将错误添加到 ModelState 中:
ModelState.AddModelError("DepartmantCode", "DepartmantCode 是必需的");
这样做会失去客户端的验证功能。