如何在c#中动态设置/删除属性

本文关键字:设置 删除 属性 动态 | 更新日期: 2023-09-27 18:25:31

我在项目中使用from属性验证。

[Required(ErrorMessage = "DepartmentCode is Required")]
public string DepartmentCode { get; set; }

在某些情况下,不需要部门代码。在我的情况下,如何动态忽略Validation?

如何在c#中动态设置/删除属性

看看:动态删除属性的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中使用了这种方法。