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.com
、foo@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 => 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 Core - 使用 WebAPI 和 MVC 前端的 JWT 身份验证不起作用