2012-02-23 2 views
0

Я создал пользовательский DataAnnotationsModelValidatorProvider:Пользовательские 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 но никогда не ударил. Я понимаю, что этот пользовательский поставщик валидатора должен быть выполнен для каждого свойства в моей модели. Я что-то упускаю?

ответ

0

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

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

Thanks. Мне действительно нужен доступ к атрибутам, потому что часть '// Do custom stuff ...' перемещает/редактирует некоторые атрибуты проверки модели. Однако я попытался сделать то, что вы предложили, и метод «GetValidators» все еще не срабатывает. –

+0

Хммм. Это сработало для меня, и это то, что было предложено в книге Pro MVC 3 Адама Сандерсона, поэтому не уверен, почему он не срабатывает. Так что что-то еще должно быть неправильным и, возможно, не поставщиком, из которого вы унаследовали. Надеюсь, вы найдете ответ. – Dangerous

0

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

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

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

ModelValidatorProviders.Providers.Add(new DependencyResolverModelValidatorProvider()); 
Смежные вопросы