为了保持我的模型验证清洁我想实现我自己的验证属性,如PhoneNumberAttribute和EmailAttribute。其中一些可以有利地被实现为继承自RegularExpressionAttribute的简单类。
但是,我注意到这样做会破坏这些属性的客户端验证。我假设有某种类型的绑定在某个地方失败。
任何想法我可以做什么来让客户端验证工作?
代码示例:
public sealed class MailAddressAttribute : RegularExpressionAttribute { public MailAddressAttribute() : base(@"^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}$") { } }
解决方法
您需要为自定义属性注册客户端验证适配器。在这种情况下,您可以使用System.Web.Mvc中的现有RegularExpressionAttributeAdapter,因为它应该与标准regex属性完全相同。然后在应用程序开始使用时注册它:
DataAnnotationsModelValidatorProvider.RegisterAdapter( typeof(MailAddressAttribute),typeof(RegularExpressionAttributeAdapter));
您应该编写一个需要自定义客户端验证的属性,您可以从DataAnnotationsModelValidator继承自己的适配器(另见Phil Haack’s blog)。