ASP.NET MVC 客户端电子邮件验证不起作用

Posted

技术标签:

【中文标题】ASP.NET MVC 客户端电子邮件验证不起作用【英文标题】:ASP.NET MVC client-side e-mail validation doesn't work 【发布时间】:2011-11-06 17:02:09 【问题描述】:

在我的注册表单中,我想使用 MVC 正则表达式进行一些客户端验证,但它不起作用...这是模型代码的一部分

        [Required]
        [RegularExpression(@"^([a-zA-Z0-9_\-\.]+)@((\[[0-9]1,3\.[0-9]1,3\.[0-9]1,3\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]2,4|[0-9]1,3)(\]?)$", ErrorMessage = "Please enter a valid e-mail adress")]
        [DataType(DataType.EmailAddress)]
        [Display(Name = "Email address*")]
        public string Email  get; set; 

但消息无论如何都不想出现...这里有什么问题?

编辑

在我看来我有这个

            <div>
            <div class="editor-label">
                @html.LabelFor(m => m.Email)
            </div>
            <div class="editor-field">
                @Html.TextBoxFor(m => m.Email)
                @Html.ValidationMessageFor(m => m.Email)
            </div>
            </div>

我还在布局中包含了 jQuery 库

<head>
    <meta charset="utf-8" />
    <title>@ViewBag.Title</title>
    <link href="/Content/Site.css" rel="stylesheet" type="text/css" />
    <script src="/Scripts/jquery-1.5.1.min.js" type="text/javascript"></script>
    <script src="/Scripts/modernizr-1.7.min.js" type="text/javascript"></script>
    <script src="/Scripts/jquery.unobtrusive-ajax.min.js" type="text/javascript"></script>
    <script type="text/javascript" src="/Scripts/jquery.validate.min.js"></script>
    <script src="/Scripts/jquery.validate.unobtrusive.min.js" type="text/javascript"></script>
    @RenderSection("Head")
</head>

【问题讨论】:

只是一点旁注。查看 NuGet 包 DataAnnotationsExtensions。它有一个您可以使用的电子邮件数据注释 :) dataannotationsextensions.org 请考虑用更强大的东西替换基于正则表达式的电子邮件验证,因为它会因合法地址太多而失败,包括foo+bar@test.comfoo@bar.museum,并且不会在应该失败的时候失败,就像foo..x@test.com。我建议您使用 EmailVerify.NET,这是一个强大的 .NET email validation 组件,您可以轻松地与您的 ASP.NET MVC 项目集成。免责声明:我是 EmailVerify.NET 的首席开发人员。 【参考方案1】:

我终于明白了…… 在RegularExpression属性后替换Required属性解决了问题)))

改为这个

        [Required]
        [RegularExpression(@"^([a-zA-Z0-9_\-\.]+)@((\[[0-9]1,3\.[0-9]1,3\.[0-9]1,3\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]2,4|[0-9]1,3)(\]?)$", ErrorMessage = "Please enter a valid e-mail adress")]

        [DataType(DataType.EmailAddress)]
        [Display(Name = "Email address*")]
        public string Email  get; set; 

现在我有

        [RegularExpression(@"^([a-zA-Z0-9_\-\.]+)@((\[[0-9]1,3\.[0-9]1,3\.[0-9]1,3\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]2,4|[0-9]1,3)(\]?)$", ErrorMessage = "Please enter a valid e-mail adress")]
        [Required]

        [DataType(DataType.EmailAddress)]
        [Display(Name = "Email address*")]
        public string Email  get; set; 

现在可以完美运行了!

【讨论】:

这听起来像是您依赖订单来验证属性。仅当 (a) 字段具有值和 (b) 该值不符合正则表达式模式时,才会出现正则表达式验证消息。如果该字段为空,则在输入值之前,您将收到 Required 属性验证消息。【参考方案2】:

你还需要

1.@Html.ValidationMessageFor(m =&gt; m.Email) 在您希望消息出现的视图中

2.包括客户端验证所需的 JavaScript 文件。如果您使用的是不显眼的验证,那么这将是

jQuery, 
jQuery validate, 
jQuery validate unobtrusive 

按这个顺序。

【讨论】:

如果你检查 DOM,你能在电子邮件输入中看到data-val-regex-pattern="^([a-zA-Z0-9_\-\.]+)@((\[[0-9]1,3\.[0-9]1,3\.[0-9]1,3\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]2,4|[0-9]1,3)(\]?)$" 吗? 不,我用 FIrebug 看不到它……但我不知道为什么……任何地方都没有 data-val-regex-pattern 属性。

以上是关于ASP.NET MVC 客户端电子邮件验证不起作用的主要内容,如果未能解决你的问题,请参考以下文章

客户端验证在带有 Bootstrap 的 ASP.NET MVC5 中不起作用

为啥 jQuery 验证函数在 ASP.NET MVC Core 应用程序中不起作用?

asp.net从谷歌应用程序帐户发送邮件不起作用

ASP.Net Core - 使用 WebAPI 和 MVC 前端的 JWT 身份验证不起作用

数据注释在部分 ASP.NET MVC 中不起作用 jquery 不显眼的验证

ASP.NET MVC5 OWIN Facebook 身份验证突然不起作用