如何为MVC创build自定义validation属性

我想创build一个MVC2自定义validation属性的电子邮件地址不从RegularExpressionAttributeinheritance,但可以在客户端validation中使用。 任何人都可以指向正确的方向吗?

我尝试了这样简单的事情:

[AttributeUsage( AttributeTargets.Property | AttributeTargets.Field, AllowMultiple = false )] public class EmailAddressAttribute : RegularExpressionAttribute { public EmailAddressAttribute( ) : base( Validation.EmailAddressRegex ) { } } 

但它似乎并没有为客户端工作。 但是,如果我使用RegularExpression(Validation.EmailAddressRegex)]似乎工作正常。

您需要注册新属性的适配器才能启用客户端validation。

由于RegularExpressionAttribute已经有了一个适配器,即RegularExpressionAttributeAdapter,所以你只需重用它即可。

使用静态构造函数将所有必需的代码保留在同一个类中。

 [AttributeUsage(AttributeTargets.Field | AttributeTargets.Property, AllowMultiple = false)] public class EmailAddressAttribute : RegularExpressionAttribute { private const string pattern = @"^\w+([-+.]*[\w-]+)*@(\w+([-.]?\w+)){1,}\.\w{2,4}$"; static EmailAddressAttribute() { // necessary to enable client side validation DataAnnotationsModelValidatorProvider.RegisterAdapter(typeof(EmailAddressAttribute), typeof(RegularExpressionAttributeAdapter)); } public EmailAddressAttribute() : base(pattern) { } } 

要了解更多信息,请查看这篇文章解释完整的过程。 http://haacked.com/archive/2009/11/19/aspnetmvc2-custom-validation.aspx

CustomValidationAttribute类MSDN页面现在有几个例子。 Phil Haacked的post已经过时了。

看看这篇文章中的通用依赖属性validation器

你有没有尝试过使用数据注解?

这是我的Annotations项目使用System.ComponentModel.DataAnnotations;

 public class IsEmailAddressAttribute : ValidationAttribute { public override bool IsValid(object value) { //do some checking on 'value' here return true; } } 

这是在我的模型项目

 namespace Models { public class ContactFormViewModel : ValidationAttributes { [Required(ErrorMessage = "Please provide a short message")] public string Message { get; set; } } } 

这是我的控制器

 [AcceptVerbs(HttpVerbs.Post)] public ActionResult ContactUs(ContactFormViewModel formViewModel) { if (ModelState.IsValid) { RedirectToAction("ContactSuccess"); } return View(formViewModel); } 

你需要谷歌DataAnnotations,因为你需要抓住项目,并编译它。 我会这样做,但我需要离开这里很长的一段时间。

希望这可以帮助。

编辑

发现这是一个快速的谷歌。