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

6

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

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

在某些情况下,DepartmentCode并不是必需的。在我的情况下,我如何动态地忽略验证?

如果在某些情况下不需要,为什么要设置属性?属性是静态的,为什么不创建一个属性或类似的东西呢? - H.B.
1
在你的代码中它可能被称为“departmant”,但你的错误消息肯定应该称它为“department”。 - spender
@ H.B. 实际上,在一个案例中我的业务发生了变化....在另一个案例中,这个属性是必需的... - M.Azad
4个回答

2
请看:

请查看:动态删除C#属性

无论如何,我认为正确的解决方案是从RequiredAttribute继承一个属性并覆盖Validate()方法(这样您就可以检查该字段是否需要)。如果您想保持客户端验证工作,请检查CompareAttribute实现。


1

0

我在模型中解决了这个问题,在某些情况下可能不是理想的解决方案,但它是最便宜和最快速的方法。

public string NonMandatoryDepartmentCode
{
    get
    {
        return DepartmentCode;
    }
    set
    {
        DepartmentCode = value;
    }
}

当我继承了一个包含我想要覆盖的属性的基础模型时,我使用了这种方法来处理MVC。


0

我建议你从模型中移除 RequiredAttribute,并在控制器中检查它,以便与导致其不必需的任何内容进行比较。

如果它是必需的,但值未填写,则手动将错误添加到 ModelState 中:

ModelState.AddModelError("DepartmantCode", "DepartmantCode 是必需的");

这样做会失去客户端的验证功能。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接