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

时间:2012-02-21 15:35:04

标签: c# wpf mvvm attributes

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

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

在某些情况下,不需要使用DepartmentCode。在我的情况下,如何动态忽略验证?

4 个答案:

答案 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。