【问题标题】:ASP.NET MVC client-side e-mail validation doesn't workASP.NET MVC 客户端电子邮件验证不起作用
【发布时间】: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 的首席开发人员。

标签: jquery asp.net-mvc regex asp.net-mvc-3 validation


【解决方案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 属性。
猜你喜欢
  • 2014-03-25
  • 2014-08-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-16
  • 1970-01-01
  • 2011-12-19
  • 1970-01-01
相关资源
最近更新 更多