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非常相似,我建议您改用它们。