我正在使用Contoso University项目尝试Fluent验证。
因此,我已将验证器属性添加到现有类:
[Validator(typeof(PersonValidator))]
public abstract class Person
{
public int ID { get; set; }
[Required]
[StringLength(50)]
[Display(Name = "Last Name")]
public string LastName { get; set; }
}
我的PersonValidator
尚未执行任何操作:
public class PersonValidator : AbstractValidator<Person>
{
public PersonValidator()
{
}
}
但是当我访问学生的创建页面时,我的调试器会在EditorFor
行上停止。...
@Html.EditorFor(model => model.LastName,
new { htmlAttributes = new { @class = "form-control" } })
...。我得到一个错误:
不打扰的客户端验证规则中的验证类型名称必须为 独特。多次看到以下验证类型: 必填
我似乎没有多次对同一元素进行相同的验证,所以为什么会出现错误? 流利的验证可以与MVC的内置验证一起使用吗?
答案 0 :(得分:2)
如果将FluentValidation与DataAnnotations一起使用,则会发生这种情况。尝试在Application_Start中做类似的事情
DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes = false;
FluentValidationModelValidatorProvider.Configure(provider => provider.AddImplicitRequiredValidator = false);
var fluentValidationModelValidatorProvider = new FluentValidationModelValidatorProvider(new AttributedValidatorFactory());
ModelValidatorProviders.Providers.Add(fluentValidationModelValidatorProvider);
答案 1 :(得分:0)
根据this页,您可以尝试删除DataAnnotations验证。
与ASP.NET内置验证的兼容性。默认情况下,在执行FluentValidation之后,任何其他验证器提供程序都会 也有机会执行。这意味着您可以混合 具有DataAnnotations属性(或任何其他ASP.NET)的FluentValidation ModelValidatorProvider实现)。
如果要禁用此行为,以使FluentValidation为 只有执行的验证库,您可以设置 在您的RunDefaultMvcValidationAfterFluentValidation执行为false 应用程序启动例程:
services.AddMvc().AddFluentValidation(fv => { fv.RunDefaultMvcValidationAfterFluentValidationExecutes = false; });
注意如果您设置 RunDefaultMvcValidationAfterFluentValidation执行为false然后 对IValidatableObject的支持也将被禁用。
希望这会有所帮助!
答案 2 :(得分:0)
我不确定为什么会在字符串字段中添加隐式必需的验证器,但是当我配置Fluent Validation Provider在我的Global.asax.cs
文件中不添加隐式必需的验证器时,问题就消失了:>
FluentValidationModelValidatorProvider.Configure(provider
=> provider.AddImplicitRequiredValidator = false);
我不想更改任何现有数据注释的行为,所以我只添加了