流畅的验证。错误:不显眼的客户端验证规则中的验证类型名称必须是唯一的

时间:2011-01-22 11:08:54

标签: jquery c#-4.0 asp.net-mvc-3 fluentvalidation

我得到了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();          
        }
}

但如果我留下一个验证器 - 一切正常。 我该怎么做才能为字段提供更多的验证。

2 个答案:

答案 0 :(得分:26)

如果您对同一元素进行多次相同的验证,则会显示此错误。

未为默认DataAnnontations 设置AddImplicitRequiredAttributeForValueTypes = false您的FluentValidation将在任何ValueTypes(如int)上添加必需的验证。如果您同时在任何ValueType上添加RuleFor(或[Required]属性),则该字段将具有额外的必需属性。

出于这个原因(我想明确设置所有验证)我在Application_Start()中有以下内容:

var fluentValidationModelValidatorProvider = new FluentValidationModelValidatorProvider(new AttributedValidatorFactory());
ModelValidatorProviders.Providers.Add(fluentValidationModelValidatorProvider);
DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes = false;
fluentValidationModelValidatorProvider.AddImplicitRequiredValidator = false;

答案 1 :(得分:16)

FluentValidation.NET被称为 Fluent ,因为它为链接方法提供了fluent interface

public TestViewDataValidation()
{
    RuleFor(x => x.Login)
        .NotNull()
        .NotEmpty()
        .EmailAddress();
}

备注:在这种情况下,NotNullNotEmpty规则的使用似乎对我不利。 NotEmpty就足够了。