【问题标题】:How to programatically turn on/off a Data Annotation Validation Attribute如何以编程方式打开/关闭数据注释验证属性
【发布时间】:2023-04-10 08:02:01
【问题描述】:

所以,我使用的是 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 属性的范围。或者甚至将其关闭。我怎么能在不改变我的模型类的情况下做到这一点?这可以通过编程方式实现吗?

【问题讨论】:

  • 你能澄清一下some situations是什么意思吗?您是指不同的操作吗?
  • 示例:用户可以有权限创建一个 14 岁的人。需要明确的是,我的问题不是解决问题,而是更多关于如何处理 MVC 架构问题。

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


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    查看我的答案:

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

    这通常只是实现接口并确定何时执行规则的问题。

    【讨论】:

      【解决方案3】:

      我刚刚意识到这个案例的解决方案。

      例如。用户可以有权创建 14 岁的人。

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

      DataContext.Configuration.ValidateOnSaveEnabled = false;

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

      【讨论】:

        猜你喜欢
        • 2015-07-05
        • 1970-01-01
        • 2012-05-31
        • 1970-01-01
        • 2011-08-08
        • 1970-01-01
        • 1970-01-01
        • 2010-09-05
        • 1970-01-01
        相关资源
        最近更新 更多