1

我已經對我的模型(也用於WCF方法)使用Enterprise Library 5驗證,因此我決定避免使用ASP.NET 4中的冗餘驗證器帶有DataAnnotations的MVC。集成ASP.NET MVC驗證和企業庫驗證

但是,似乎企業庫驗證器不是由MVC自動拾取的。

如果我使用MVC DataAnnotations:

[RegularExpression(MyValidationExpressions.Email, ErrorMessage = MyValidationMessages.InvalidEmailMessage)] 
public virtual string Email { get; set; } 

HTML包含數據-VAL-正則表達式模式和場正在驗證客戶端。

但是,如果使用現有的基於EL驗證:

[RegexValidator(MyValidationExpressions.Email, MessageTemplate = MyValidationMessages.EmptyFieldMessage))] 
public virtual string Email { get; set; } 

不顯示驗證錯誤的客戶端,並將生成的HTML沒有任何驗證屬性。

我在這裏錯過了什麼,如何強制MVC使用客戶端和服務器端的現有EL驗證器?

解決方案

我接受完全轉移到DataAnnotations解決方案。這是最簡單的方法,它與EntLib 5和MVC 4一起工作正常。但是有一點與ValidationFactory有關 - 我必須用CreateValidator和特定標誌替換CreateValidatorFromAttributes。請參閱這篇文章解釋有關DataAnnotations如何與ValidationFactory工作:

CreateValidatorFromAttributes doesn't use DataAnnotations Attributes

而且DataAnnotations有[必需]屬性與空字符串和僅包含空格的字符串很好的交易。與VAB有一些問題。

+0

[Asp.Net MVC 2客戶端驗證實現企業庫驗證塊]的可能重複(http://stackoverflow.com/questions/2666954/asp-net-mvc-2-client-validation-implementation-for-企業庫驗證) – jrummell

+0

http://elvalweb.codeplex.com/ – Steven

+0

相關問題http:// stackoverflow。com/questions/5619996/can-mvc-updatemodel-use-enterprise-library-vab –

回答

1

這不起作用的原因是因爲VAB的RegexValidatorAttribute不是從System.ComponentModel.DataAnnotations.RegularExpressionAttribute繼承,而是直接從ValidationAttribute繼承。因爲這個MVC不知道如何處理它。

有一種方法來改變MVC做這種處理的方式,但我不知道如何。但是,爲什麼不只是用DataAnnotations'RegularExpressionAttribute替換RegexValidatorAttribute的用法呢?驗證應用程序塊5能夠處理DataAnnotations屬性,因此如果DataAnnotations屬性正在工作,請使用它們。

+0

謝謝,我只是試過你的建議 - DataAnnotations可以正常工作,而不是VAB,但是有一點與ValidationFactory有關 - 我必須替換CreateValidatorFromAttributes使用CreateValidator和特定標誌:http://entlib.codeplex.com/workitem/30303 – JustAMartin

2

您可以爲企業庫驗證創建ModelValidatorProvider。布拉德威爾遜有一個blog post描述如何做到這一點。

但是,看起來這隻會執行服務器端驗證。如果您使用的屬性與DataAnnotations非常相似,我建議您改用它們。