我在验证电子邮件方面遇到了一些问题 .
在我的模型中:
[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 回答
尝试使用
Html.EditorFor
辅助方法而不是Html.TextBoxFor
.你需要使用RegularExpression属性,如下所示:
并且不要删除[必需],因为[RegularExpression]不会影响空字段 .
脚本通常在html页面的末尾加载,而MVC建议使用bundle,只是说 . 所以我最好的选择是你的
jquery.validate
文件以某种方式被改变或者没有更新到最新版本,因为它们确实验证了电子邮件输入 .所以你可以更新/刷新你的nuget包或者自己编写你自己的函数 .
这是一个在
jquery.validate.unobtrusive
之后添加到额外文件中的示例:这只是当前
jquery.validate
Regex的复制和粘贴,但这样您就可以设置自定义错误消息/将额外的方法添加到您可能希望在不久的将来验证的字段中 .我使用MVC 3.我的一个类中的电子邮件地址属性的示例是:
如果输入是可选的,请删除
Required
. 不需要正则表达式,尽管我有一个覆盖电子邮件地址中的所有选项,直到RFC 2822级别(它很长) .如果您使用的是.NET Framework 4.5,则解决方案是使用位于
System.ComponentModel.DataAnnotations
内的EmailAddressAttribute
.您的代码应该类似于:
如果你还没有使用.net 4.5:
然后你可以这样做: