自定义DataAnnotationsModelValidatorProvider未触发

时间:2012-02-23 14:07:09

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

我创建了一个自定义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方法中放了一个断点,但它永远不会被击中。我的理解是应该为我的模型中的每个属性执行此自定义验证器提供程序。我错过了什么吗?

2 个答案:

答案 0 :(得分:0)

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

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);
    }
}

答案 1 :(得分:0)

ModelValidatorProviders.Providers已经包含DataAnnotationsModelValidatorProvider。

在添加自定义DataAnnotationsModelValidatorProvider之前,只需删除它。

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

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