我已经在我的模型中使用了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存在一些问题。
答案 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属性正常工作,只需使用它们。