ASP.Net MVC没有将电子邮件呈现为type ="email"

Mar*_*ark 2 html asp.net validation asp.net-mvc-3

在我的模型中,我有:

[Required]
[DataType(DataType.EmailAddress)]
public string EmailAddress {get; set;}
Run Code Online (Sandbox Code Playgroud)

但是在我看来(来源)这会呈现为:

<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">
Run Code Online (Sandbox Code Playgroud)

我认为应该使用type ="email"而不是type ="text" 进行渲染- 因此在客户端进行验证时,如果电子邮件的格式不是有效,则不会提取.

编辑

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

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

谢谢,

标记

Ian*_*dge 6

DataType属性不对输入执行任何验证或呈现email属性.问题描述了如何使用正则表达式或Data Annotations Extensions库添加电子邮件验证 .

此外,如果你使用@Html.TextBoxFor(m => m.Email, new { type = "email" })(如果使用的是HTML5的doctype),将呈现电子邮件属性,该属性将导致兼容的浏览器验证-看到这个.

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