我在项目中使用属性验证。
[Required(ErrorMessage = "DepartmentCode is Required")]
public string DepartmentCode { get; set; }
在某些情况下,不需要使用DepartmentCode。在我的情况下,如何动态忽略验证?
答案 0 :(得分:1)
看看:Remove C# attribute of a property dynamically
无论如何,我认为正确的解决方案是从RequiredAttribute
继承属性并覆盖Validate()
方法(这样您就可以检查何时需要该字段)。如果要保持客户端验证的有效,可以检查CompareAttribute
实现。
答案 1 :(得分:1)
除了动态添加和删除验证之外,您最好还是创建一个更适合此目的的属性。
以下文章演示了这一点(带有客户端验证的MVC3): http://blogs.msdn.com/b/simonince/archive/2011/02/04/conditional-validation-in-asp-net-mvc-3.aspx
答案 2 :(得分:0)
我会从您的模型中删除RequiredAttribute,并在您点击控制器后检查它,并根据不需要的任何原因进行检查。
如果它属于需要并且未填写值的情况,请手动将错误添加到ModelState
ModelState.AddModelError("DepartmantCode", "DepartmantCode is Required");
你只会以这种方式失去客户端的验证
答案 3 :(得分:0)
我已经在模型中解决了这个问题,在某些情况下它并不理想,但它是最便宜和最快捷的方式。
public string NonMandatoryDepartmentCode
{
get
{
return DepartmentCode;
}
set
{
DepartmentCode = value;
}
}
当我继承的基础模型包含我想要覆盖的属性时,我将此方法用于MVC。