首页 文章

使用ASP.NET MVC数据类型属性验证电子邮件地址

提问于
浏览
138

我在验证电子邮件方面遇到了一些问题 .

在我的模型中:

[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"}) 
@Html.ValidationMessageFor(m => m.ReceiverMail)

现在,当你将场留空时,它正确地向我显示“场不能为空” . 但是当你填写一个无效的电子邮件地址,如:“fwenrjfw”,那么表格并没有说“电子邮件无效” .

如何获取表单以将输入验证为电子邮件地址?我正在寻找一些帮助 .

7 回答

  • 0

    尝试使用 Html.EditorFor 辅助方法而不是 Html.TextBoxFor .

  • 10

    你需要使用RegularExpression属性,如下所示:

    [RegularExpression("^[a-zA-Z0-9_\\.-]+@([a-zA-Z0-9-]+\\.)+[a-zA-Z]{2,6}$", ErrorMessage = "E-mail is not valid")]
    

    并且不要删除[必需],因为[RegularExpression]不会影响空字段 .

  • 18

    脚本通常在html页面的末尾加载,而MVC建议使用bundle,只是说 . 所以我最好的选择是你的 jquery.validate 文件以某种方式被改变或者没有更新到最新版本,因为它们确实验证了电子邮件输入 .

    所以你可以更新/刷新你的nuget包或者自己编写你自己的函数 .

    这是一个在 jquery.validate.unobtrusive 之后添加到额外文件中的示例:

    $.validator.addMethod(
        "email",
        function (value, element) {
            return this.optional( element ) || /^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/.test( value );
        },
        "This e-mail is not valid"
    );
    

    这只是当前 jquery.validate Regex的复制和粘贴,但这样您就可以设置自定义错误消息/将额外的方法添加到您可能希望在不久的将来验证的字段中 .

  • 36

    我使用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; }
    

    如果输入是可选的,请删除 Required . 不需要正则表达式,尽管我有一个覆盖电子邮件地址中的所有选项,直到RFC 2822级别(它很长) .

  • 3

    如果您使用的是.NET Framework 4.5,则解决方案是使用位于 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; }
    
  • 13
    [Required(ErrorMessage = "Please enter Social Email id")]
        [DataType(DataType.EmailAddress)]
        [EmailAddress]
        public string Email { get; set; }
    
  • 286

    如果你还没有使用.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; }
        }
    

相关问题