在我的模特中,我有:
[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”,以便正确检查有效的电子邮件地址?
谢谢你,
标记
答案 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
输入类型。
工具包中还支持以下输入类型: 文字,颜色,电子邮件,搜索,时间,电话,文件,日期,日期时间,月, 周,范围,数量