3

在我的模型中,我有:

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

然而,在我看来(来源)这呈现为:

<label for="EmailAddress">EmailAddress</label>
<input data-val="true" data-val-required="The EmailAddress field is required"
    id="EmailAddress" name="EmailAddress" type="text" value="" />
<span class="field-validation-valid" data-valmsg-for="EmailAddress" data-valmsg-replace="true">

我认为这应该使用type="email"而不是 type="text" 呈现 - 所以在客户端验证时,如果电子邮件不是有效格式,它不会被接收。

编辑

此外,当我调用if (ModelState.IsValid)时,即使电子邮件地址的格式不正确,它也会返回 true。所以即使浏览器不支持 HTML5,我也会认为控制器中的 IsValid 会强制执行验证 - 不是这样吗?

我的模型上是否还需要其他东西来强制 type="email" 以便正确检查有效的电子邮件地址?

谢谢,

标记

4

3 回答 3

7

DataType 属性不对输入进行任何验证或呈现电子邮件属性。问题描述了如何使用正则表达式或 数据注释扩展库添加电子邮件验证。

此外,如果您使用@Html.TextBoxFor(m => m.Email, new { type = "email" })(如果使用 HTML5 文档类型)将呈现电子邮件属性,这将导致兼容浏览器的验证 - 请参阅

它还有一个额外的优势,即一些(最现代的)智能手机将显示一个电子邮件键盘(带有@符号和.com)以便于打字。请参阅默认为 iPhone 上的数字、电子邮件和 URL 键盘

于 2013-04-17T16:09:21.563 回答
0

This input type is only available in HTML5:

<input type="email" />

You can try to set doctype to HTML5 for your document like this:

<!DOCTYPE html>

EDIT But you won't be sure client browser will be able to treat / validate this input as an email.

于 2013-04-17T12:42:23.000 回答
0

这也许正是您所需要的。在该页面上,它说它支持Email输入类型。

工具包中还支持以下输入类型:文本、颜色、电子邮件、搜索、时间、电话、文件、日期、日期时间、月、周、范围、数字

于 2013-04-17T12:46:33.353 回答