立即验证客户端的电子邮件字段

时间:2014-06-12 09:15:44

标签: jquery asp.net-mvc validation unobtrusive-validation email-validation

我的视图模型中有以下属性:

[EmailAddress]
[DataType(DataType.EmailAddress)]
public string Email { get; set; }

使用以下剃刀视图渲染:

@Html.LabelFor(m => m.Email)
@Html.EditorFor(m => m.Email)
@Html.ValidationMessageFor(m => m.Email)

这会产生以下html输出(请参阅type="email",这就是我想要的):

<input data-val="true" data-val-email="The Email field is not a valid e-mail address." id="Email" name="Email" type="email" value="">

我也将ClientValidationEnabledUnobtrusiveJavaScriptEnabled设置为true。对所需等的验证按预期工作。但是,在更改输入字段中的字符或聚焦另一个输入字段后,不会立即触发此电子邮件字段的验证。

首先,我的浏览器会发出消息,表明它不是有效的电子邮件地址。但是,当我输入sfsdf@sdfsfd时,我的浏览器(Chrome)会将其检测为有效的电子邮件地址,然后ASP.NET MVC的电子邮件验证程序表明它不是有效的格式。但只有当我点击提交按钮时才触发ASP.NET验证器(浏览器验证仅在提交时触发,但这不是问题,因为无论如何我都会禁用浏览器验证。)

当我使用@Html.TextBoxFor()代替@Html.EditorFor()时,它会生成以下标记(使用type="text"):

<input data-val="true" data-val-email="The Email field is not a valid e-mail address." id="Email" name="Email" type="text" value="">

现在,在更改输入字段中的任何字符或关注另一个字符时会立即触发验证。我需要type="email"

是否可以立即强制验证电子邮件字段?

2 个答案:

答案 0 :(得分:4)

Type = email是HTML5标记。我比较了我的两个项目,其中另一个使用旧的jquery验证器插件,它似乎不适用于电子邮件类型。然而,较新的项目使用最新的验证器,它确实工作正常。

尝试更新您的jquery验证器插件。

答案 1 :(得分:-1)

 [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 = "Email is not valid.")]

尝试此属性