2012-08-15 98 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; 
    } 
);