【问题标题】:Custom DataAnnotationsModelValidatorProvider Not Firing自定义 DataAnnotationsModelValidatorProvider 未触发
【发布时间】:2012-02-23 14:07:09
【问题描述】:

我创建了一个自定义DataAnnotationsModelValidatorProvider

public class CustomValidatorProvider : DataAnnotationsModelValidatorProvider
{
    protected override IEnumerable<ModelValidator> GetValidators(ModelMetadata metadata, ControllerContext context, IEnumerable<Attribute> attributes)
    {
        //Do custom stuff...

        return base.GetValidators(metadata, context, attributes);
    }
}

我已经在我的Global.asax注册了它:

ModelValidatorProviders.Providers.Add(new CustomValidatorProvider());

我在GetValidators 方法中设置了一个断点,但它从未被命中。我的理解是,应该为我模型中的每个属性执行此自定义验证器提供程序。我错过了什么吗?

【问题讨论】:

    标签: asp.net-mvc-3 validation data-annotations


    【解决方案1】:

    我认为您需要覆盖 ModelValidatorProvider 而不是 DataAnnotationsModelValidatorProvider。而且方法签名不应该有attributes参数,应该是公开的:

    public class CustomValidatorProvider : ModelValidatorProvider
    {
        public override IEnumerable<ModelValidator> GetValidators(ModelMetadata metadata, ControllerContext context)
        {
            //Do custom stuff...
    
            //You cannot call the base here as ModelValidatorProvider is abstract.
            //return base.GetValidators(metadata, context);
        }
    }
    

    【讨论】:

    • 谢谢。我实际上需要访问属性,因为//Do custom stuff... 部分移动/编辑模型上的一些验证属性。但是,我确实尝试了您的建议,但 GetValidators 方法仍然没有触发。
    • 嗯。它对我有用,这就是 Adam Sanderson 在 Pro MVC 3 书中所建议的,所以不知道为什么它不会触发。所以肯定有别的东西是错的,也许不是你继承的提供者。希望你能找到答案。
    【解决方案2】:

    ModelValidatorProviders.Providers 已经包含一个 DataAnnotationsModelValidatorProvider。

    在添加您的自定义 DataAnnotationsModelValidatorProvider 之前将其删除。

    ModelValidatorProviders.Providers.Remove(ModelValidatorProviders.Providers.OfType<DataAnnotationsModelValidatorProvider>().First());
    
    ModelValidatorProviders.Providers.Add(new DependencyResolverModelValidatorProvider());
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-09
      • 2015-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-13
      • 2018-05-31
      相关资源
      最近更新 更多