将ASP.NET MVC验证与企业库验证集成

时间:2012-09-14 11:57:01

标签: .net asp.net-mvc validation enterprise-library validation-application-bl

我已经在我的模型中使用了Enterprise Library 5 Validation(也在WCF方法中使用),因此我决定避免使用带有DataAnnotations的ASP.NET 4 MVC中的冗余验证器。

但看起来,MVC不会自动获取企业库验证器。

如果我使用MVC DataAnnotations:

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

HTML包含data-val-regex-pattern,该字段正在验证客户端。

但如果我使用现有的基于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还具有[Required]属性,可以很好地处理空字符串和仅包含空格的字符串。 VAB存在一些问题。

2 个答案:

答案 0 :(得分:2)

您可以为企业库验证创建ModelValidatorProvider。 Brad Wilson有blog post描述如何做到这一点。

但是,看起来这只会执行服务器端验证。如果您使用的属性与DataAnnotations非常相似,我建议您使用它们。

答案 1 :(得分:1)

这不起作用的原因是因为VAB的RegexValidatorAttribute不是从System.ComponentModel.DataAnnotations.RegularExpressionAttribute继承,而是直接从ValidationAttribute继承。因为这个MVC不知道如何处理它。

有一种方法可以改变MVC处理这种方式,但我不知道如何处理。但是,为什么不直接用{Data}注释'RegexValidatorAttribute替换RegularExpressionAttribute的用法?验证应用程序块5能够处理DataAnnotations属性,因此如果DataAnnotations属性正常工作,只需使用它们。