使用ASP.NET MVC数据types属性进行电子邮件地址validation
我在validation电子邮件时遇到了一些问题。
在我的模型中:
[Required(ErrorMessage = "Field can't be empty")] [DataType(DataType.EmailAddress, ErrorMessage = "E-mail is not valid")] public string ReceiverMail { get; set; }
在我看来:
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script> <script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script> @Html.TextBoxFor(m => m.ReceiverMail, new { @placeholder="E-mail"}) <br /> @Html.ValidationMessageFor(m => m.ReceiverMail)
现在,当您将字段留空时,正确显示“字段不能为空”。 但是,当你填写一个无效的电子邮件地址,如“fwenrjfw”,那么表格不会说“电子邮件无效”。
我怎样才能得到表单validationinput为电子邮件地址? 我正在寻找一些帮助。
如果您使用的是.NET Framework 4.5,则解决scheme是使用驻留在System.ComponentModel.DataAnnotations
EmailAddressAttribute
。
你的代码应该看起来类似于这个:
[Display(Name = "Email address")] [Required(ErrorMessage = "The email address is required")] [EmailAddress(ErrorMessage = "Invalid Email Address")] public string Email { get; set; }
尝试使用Html.EditorFor
帮助器方法而不是Html.TextBoxFor
。
你需要使用RegularExpression属性,像这样:
[RegularExpression("^[a-zA-Z0-9_\\.-]+@([a-zA-Z0-9-]+\\.)+[a-zA-Z]{2,6}$", ErrorMessage = "E-mail is not valid")]
不要删除[Required],因为[RegularExpression]不会影响空字段。
如果你还没有使用.net 4.5:
/// <summary> /// TODO: AFTER WE UPGRADE TO .NET 4.5 THIS WILL NO LONGER BE NECESSARY. /// </summary> public class EmailAnnotation : RegularExpressionAttribute { static EmailAnnotation() { DataAnnotationsModelValidatorProvider.RegisterAdapter(typeof(EmailAnnotation), typeof(RegularExpressionAttributeAdapter)); } /// <summary> /// from: http://stackoverflow.com/a/6893571/984463 /// </summary> public EmailAnnotation() : base(@"^[\w!#$%&'*+\-/=?\^_`{|}~]+(\.[\w!#$%&'*+\-/=?\^_`{|}~]+)*" + "@" + @"((([\-\w]+\.)+[a-zA-Z]{2,4})|(([0-9]{1,3}\.){3}[0-9]{1,3}))$") { } public override string FormatErrorMessage(string name) { return "E-mail is not valid"; } }
那么你可以这样做:
public class ContactEmailAddressDto { public int ContactId { get; set; } [Required] [Display(Name = "New Email Address")] [EmailAnnotation] //**<----- Nifty.** public string EmailAddressToAdd { get; set; } }
我使用MVC 3.我的一个类中的电子邮件地址属性的示例是:
[Display(Name = "Email address")] [Required(ErrorMessage = "The email address is required")] [Email(ErrorMessage = "The email address is not valid")] public string Email { get; set; }
如果input是可选的,则删除Required
。 不需要正则expression式,尽pipe我有一个覆盖RFC 2822级别(这是很长的)的电子邮件地址中的所有选项。