Пользовательские данныеAnnotationsModelValidatorProvider Not Firing - PullRequest
0 голосов
/ 23 февраля 2012

Я создал пользовательский 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 голосов
/ 28 марта 2014

ModelValidatorProviders.Providers уже содержат DataAnnotationsModelValidatorProvider.

Просто удалите его перед добавлением пользовательских DataAnnotationsModelValidatorProvider.

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

ModelValidatorProviders.Providers.Add(new DependencyResolverModelValidatorProvider());
0 голосов
/ 23 февраля 2012

Я думаю, вам нужно переопределить с ModelValidatorProvider, а не DataAnnotationsModelValidatorProvider. И подпись метода не должна иметь параметр attribute и должна быть публичной:

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