2012-08-15 130 views
1

我正在使用Fluent验证在MVC中进行服务器端和不显眼的客户端验证。我不得不扩展它来满足业务需求,并且遇到了默认的DataAnnotations验证问题。所以我只想完全禁用内置的DataAnnotations提供程序,并使用我自己的Fluent验证扩展来执行此验证。使用Fluent验证时禁用默认DataAnnotations不显眼验证

基本上,我需要停止为值类型(例如数字和日期(data-val-number,data-val-date,data-val-required))内置不显眼data-val-属性的渲染。

我已经试过:

ModelValidatorProviders.Providers.Clear(); 

这似乎摆脱数/日期的属性,但所需的属性仍然存在。

我想:

DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes = false; 

但是,这似乎并没有做任何事情。也许我有错误的位置/顺序?

+0

将在Web.config中禁用Unobtrusive Validation删除这些? add key =“ClientValidationEnabled”value =“false”或add key =“UnobtrusiveJavaScriptEnabled”value =“false” – Tommy 2012-08-15 13:27:52

+0

我认为这也会禁用Fluent验证的不显眼的验证,我仍然需要。我只是不希望内置的DataAnnotation验证启动。我已经发布了下面的代码来解决这个问题。 – 2012-08-15 13:39:48

+0

太棒了,你应该标记为已知答案,因为你找出了解决方案。我从来没有不得不禁用构建东西,因此评论,而不是一个答案:) – Tommy 2012-08-15 13:53:53

回答

2

通过Fluent验证,它有自己的标志用于禁用必需的属性,必须使用FluentValidationModelValidatorProvider配置它。以下代码将兼顾默认的类型属性以及必需的属性:

//Don't use built-in type attributes (data-val-number, data-val-date) 
ModelValidatorProviders.Providers.Clear(); 

FluentValidationModelValidatorProvider.Configure(
    provider => 
    { 
     provider.ValidatorFactory = new UnityValidatorFactory(container); 

     //Don't use built-in data-val-required 
     provider.AddImplicitRequiredValidator = false; 
    } 
);