我已经在为我的模型使用 Enterprise Library 5 验证(也用于 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 不使用 DataAnnotations 属性
DataAnnotations 还具有 [Required] 属性,可以很好地处理空字符串和仅包含空格的字符串。VAB 上存在一些问题。