如何在c#中动态设置/删除属性
本文关键字:设置 删除 属性 动态 | 更新日期: 2023-09-27 18:25:31
我在项目中使用from属性验证。
[Required(ErrorMessage = "DepartmentCode is Required")]
public string DepartmentCode { get; set; }
在某些情况下,不需要部门代码。在我的情况下,如何动态忽略Validation?
看看:动态删除属性的C#属性
无论如何,我认为正确的解决方案是从RequiredAttribute
继承一个属性并重写Validate()
方法(这样您就可以检查何时需要该字段)。如果您想保持客户端验证工作,可以检查CompareAttribute
的实现。
与其动态添加和删除验证,不如创建一个更好地满足此目的的属性。
下面的文章演示了这一点(MVC3也带有客户端验证):http://blogs.msdn.com/b/simonince/archive/2011/02/04/conditional-validation-in-asp-net-mvc-3.aspx
我会从你的模型中删除RequiredAttribute,并在你点击控制器后对其进行检查,并根据不需要它的原因进行检查。
如果它属于需要并且没有填写值的情况,则手动将错误添加到ModelState
ModelState.AddModelError("DepartmantCode", "DepartmantCode is Required");
这样,您只会失去客户端的验证
我在模型中解决了这个问题,在某些情况下这并不理想,但这是最便宜、最快的方法。
public string NonMandatoryDepartmentCode
{
get
{
return DepartmentCode;
}
set
{
DepartmentCode = value;
}
}
当我继承的基本模型包含我想要覆盖的属性时,我在MVC中使用了这种方法。