Подтвердить что ты не робот

Свободные проверки. Ошибка: имена типов проверки в ненавязчивых правилах проверки клиента должны быть уникальными

Я получил 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();          
        }
}

Но если я оставлю один валидатор - все работает нормально. Что мне делать, чтобы иметь больше одной проверки для поля.

4b9b3361

Ответ 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;