将ASP.NET MVC验证与企业库验证集成
我已经在为我的模型使用EnterpriseLibrary5验证(也在WCF方法中使用),因此我决定避免ASP.NET4MVC中带有DataAnnotations的冗余验证程序 但看起来,企业库验证器并不是由MVC自动获取的 如果我使用MVC数据注释:将ASP.NET MVC验证与企业库验证集成,.net,asp.net-mvc,validation,enterprise-library,validation-application-bl,.net,Asp.net Mvc,Validation,Enterprise Library,Validation Application Bl,我已经在为我的模型使用EnterpriseLibrary5验证(也在WCF方法中使用),因此我决定避免ASP.NET4MVC中带有DataAnnotations的冗余验证程序 但看起来,企业库验证器并不是由MVC自动获取的 如果我使用MVC数据注释: [RegularExpression(MyValidationExpressions.Email, ErrorMessage = MyValidationMessages.InvalidEmailMessage)] public virtual s
[RegularExpression(MyValidationExpressions.Email, ErrorMessage = MyValidationMessages.InvalidEmailMessage)]
public virtual string Email { get; set; }
HTML包含数据val regex模式,该字段正在客户端验证
但如果我使用现有的基于EL的验证:
[RegexValidator(MyValidationExpressions.Email, MessageTemplate = MyValidationMessages.EmptyFieldMessage))]
public virtual string Email { get; set; }
它不会在客户端显示验证错误,并且生成的HTML没有任何验证属性
我在这里遗漏了什么,我如何强制MVC使用现有的EL验证器(客户端和服务器端)
解决方案:
我接受了完全转向DataAnnotations的解决方案。这是最简单的方法,在Entlib5和MVC4中都可以很好地使用。但是ValidationFactory有一个小问题——我必须用CreateValidator和特定标志替换CreateValidatorFromAttributes。有关DataAnnotations如何使用ValidationFactory的说明,请参阅本文:
DataAnnotations还有[Required]属性,它可以很好地处理空字符串和只包含空格的字符串。VAB在这方面存在一些问题。这不起作用的原因是VAB的
RegexValidatorAttribute
不是从System.ComponentModel.DataAnnotations.RegularExpressionAttribute
继承的,而是直接从ValidationAttribute
继承的。因为MVC不知道如何处理它
有一种方法可以改变MVC处理这个问题的方式,但我不知道怎么做。但是为什么不用DataAnnotations'RegularExpressionAttribute
替换RegexValidator属性的用法呢?验证应用程序块5能够处理DataAnnotations属性,因此如果DataAnnotations属性正常工作,只需使用它们。您可以为企业库验证创建一个数据库。布拉德·威尔逊(Brad Wilson)有一篇文章描述了如何做到这一点
但是,看起来这只会执行服务器端验证。如果您使用的属性与DataAnnotations非常相似,我建议您使用它们。相关问题可能重复谢谢,我刚刚尝试了您的建议-DataAnnotations可以很好地代替VAB,但是ValidationFactory有一个小问题-我必须用CreateValidator和特定标志替换CreateValidatorFromAttributes: