Ответ 1
комментарий JimmiTh по этому вопросу предоставил мне ключевое понимание, чтобы я разрешил это для себя.
В моем случае я определенно добавил дополнительного провайдера в ModelValidatorProviders
. Я добавил пользовательскую проверку factory (используя Fluent Validation) с этим кодом в файле Global.asax.cs:
ModelValidatorProviders.Providers.Add(
new FluentValidationModelValidatorProvider(validatorFactory));
Но использование нескольких поставщиков не обязательно проблематично. То, что кажется проблематичным, заключается в том, что несколько провайдеров предоставляют одни и те же валидаторы, поскольку они будут регистрировать одни и те же правила несколько раз, вызывая указанную проблему с ненавязчивым кодом проверки Microsoft.
Я закончил удаление следующей строки из того же файла, что и я решил, что мне не нужно использовать оба поставщика:
FluentValidationModelValidatorProvider.Configure();
Приведенный выше метод Configure
сам добавляет провайдера к ModelValidatorProviders
, и я дважды регистрировал один и тот же класс проверки, а следовательно, и ошибку о неповторимых именах типов проверки.
Вопрос SO jquery - бесплатные проверки. Ошибка: имена типов проверки в ненавязчивых правилах проверки клиента должны быть уникальными указывает на другой способ, который может привести к указанной проблеме с использованием нескольких поставщиков. Каждому провайдеру можно настроить добавление "неявного обязательного атрибута в" типы значений "(т.е. Свойства модели просмотра, которые не могут быть обнулены). Чтобы решить эту проблему, я мог бы изменить свой код на следующие, чтобы ни один из поставщиков не добавлял неявные требуемые атрибуты:
FluentValidationModelValidatorProvider.Configure(
provider => provider.AddImplicitRequiredValidator = false);
DependencyResolverValidatorFactory validatorFactory =
new DependencyResolverValidatorFactory();
FluentValidationModelValidatorProvider validatorFactoryProvider =
new FluentValidationModelValidatorProvider(validatorFactory);
validatorFactoryProvider.AddImplicitRequiredValidator = false;
ModelValidatorProviders.Providers.Add(validatorFactoryProvider);
DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes = false;