如何为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,因为你需要抓住项目,并编译它。 我会这样做,但我需要离开这里很长的一段时间。
希望这可以帮助。
编辑
发现这是一个快速的谷歌。