如何以编程方式打开/关闭数据注释验证属性

时间:2011-09-22 18:42:48

标签: asp.net-mvc-3 entity-framework-4.1 data-annotations validationattribute componentmodel

所以,我使用的是ASP.NET MVC 3和Entity Framework 4.1(代码优先)。

我有一个这样的课程:

public class Person
{
    public int Id { get; set; }
    public string Name { get; set; }
    [Range(18, 99)]
    public int Age { get; set; }
}

正确触发范围验证。但是,例如,在某些情况下,我想更改Age属性的范围。甚至关掉它。如果不改变我的Model类,我怎么能这样做?这可能以编程方式编写吗?

3 个答案:

答案 0 :(得分:1)

您可以使用IValidatableObject接口并定义自定义验证规则。

请参阅我的回答:

Using Data Annotations to make a field required while searching for another in a form mvc 3

通常只需要实现界面并确定何时执行规则。

答案 1 :(得分:1)

我刚刚意识到这种情况的解决方案。

EG。用户可以授权创建一个14岁的人。

在保存模型之前,我们可以调用DataContext.GetValidationErrors()并推断是否只有我们要禁用的错误验证,然后设置

DataContext.Configuration.ValidateOnSaveEnabled = false;

所以,这样我们就可以保存模型了。

答案 2 :(得分:0)

是的,可以通过编程方式注入验证器。更改现有验证器会出现单独的问题,因为某些属性是只读的,因此您可能必须删除并替换现有的验证器。

您可以按照我的回答to this question添加一个类来处理验证器。