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

时间:2013-04-17 12:37:06

标签: asp.net html asp.net-mvc-3 validation

在我的模特中,我有:

[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”,以便正确检查有效的电子邮件地址?

谢谢你,

标记

3 个答案:

答案 0 :(得分:6)

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

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

它还具有额外的优势,即一些(最现代的)智能手机将显示电子邮件键盘(使用 @ 符号和 .com )以便于输入。请参阅Default To The Numeric, Email, And URL Keyboards On The iPhone

答案 1 :(得分:0)

input type仅适用于HTML5:

<input type="email" />

您可以尝试将文档类型设置为HTML5,如下所示:

<!DOCTYPE html>

编辑但您不确定客户端浏览器是否能够将此输入视为电子邮件。

答案 2 :(得分:0)

This maybe just what you need。在该页面上,它表示它支持Email输入类型。

  

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