Свободные проверки. Ошибка: имена типов проверки в ненавязчивых правилах проверки клиента должны быть уникальными
Я получил erorr:
Имена типов проверки в ненавязчивых правила проверки клиента должны быть уникальный. Следующий тип проверки был замечен не раз: требуется. следующий тип проверки был замечен не один раз: требуется
Я использовал проверку сервера. И все работало нормально.
Но теперь я заявляю, что использую проверку на стороне клиента, и у меня возникла эта проблема.
Это мой код класса проверки:
public class TestViewDataValidation : BaseTestCreateViewDataValidation<BaseTestCreateViewData>
{
public TestViewDataValidation ()
{
this.RuleFor(x => x.Login).NotNull();
this.RuleFor(x => x.Login).NotEmpty();
this.RuleFor(x => x.Login).EmailAddress();
}
}
Но если я оставлю один валидатор - все работает нормально.
Что мне делать, чтобы иметь больше одной проверки для поля.
Ответы
Ответ 1
FluentValidation.NET
называется Fluent, поскольку он обеспечивает свободный интерфейс для методов цепочки:
public TestViewDataValidation()
{
RuleFor(x => x.Login)
.NotNull()
.NotEmpty()
.EmailAddress();
}
Примечание: использование правил NotNull
и NotEmpty
кажется мне лишним в этом случае. NotEmpty
должно быть достаточно.
Ответ 2
Эта ошибка отображается, если вы используете одно и то же подтверждение для одного и того же элемента более одного раза.
Не устанавливая AddImplicitRequiredAttributeForValueTypes = false
как для DataAnnontations по умолчанию, так и для FluentValidation добавит обязательную проверку на любые значения типов (например, int
). Если вы в то же время добавите атрибут RuleFor (или [Required]
) в любом ValueType, у вас будет дополнительное обязательное для этого поля.
По этой причине (я хочу, чтобы все проверки были явно указаны), у меня есть следующее в Application_Start()
:
var fluentValidationModelValidatorProvider = new FluentValidationModelValidatorProvider(new AttributedValidatorFactory());
ModelValidatorProviders.Providers.Add(fluentValidationModelValidatorProvider);
DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes = false;
fluentValidationModelValidatorProvider.AddImplicitRequiredValidator = false;