【问题标题】:Integrate ASP.NET MVC validation with Enterprise Library validation将 ASP.NET MVC 验证与企业库验证集成
【发布时间】:2012-09-14 11:57:00
【问题描述】:

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

但似乎 MVC 不会自动选择 Enterprise Library Validators。

如果我使用 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 上存在一些问题。

【问题讨论】:

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


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    之所以这样不行是因为VAB的RegexValidatorAttribute不是继承自System.ComponentModel.DataAnnotations.RegularExpressionAttribute,而是直接继承自ValidationAttribute。因为这个 MVC 不知道如何处理它。

    有一种方法可以改变 MVC 的处理方式,但我不知道怎么做。但是为什么不直接用 DataAnnotations 的 RegularExpressionAttribute 替换 RegexValidatorAttribute 的用法呢?验证应用程序块 5 能够处理 DataAnnotations 属性,因此如果 DataAnnotations 属性有效,只需使用它们。

    【讨论】:

    • 谢谢,我刚刚尝试了您的建议 - DataAnnotations 可以正常工作而不是 VAB,但 ValidationFactory 有一点问题 - 我必须用 CreateValidator 和特定标志替换 CreateValidatorFromAttributes:entlib.codeplex.com/workitem/30303
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-05
    相关资源
    最近更新 更多