@ Html.EditorFor如何制作属性type =“email”

时间:2012-03-25 21:53:48

标签: asp.net-mvc razor data-annotations

我可以使用TextBoxFor轻松完成此操作,但如何使用EditorFor执行此操作?

我想使用DataAnnotation [DataType(DataType.EmailAddress)],但是没有这样做。

我不太明白DataType注释实际上是做什么的,因为它乍一看似乎根本没有做任何事情。

3 个答案:

答案 0 :(得分:15)

您可以覆盖HTML属性,如果浏览器不支持,则浏览器将回退到type='text'

@Html.TextBoxFor(m => m.Email, new { @type = "email" })

答案 1 :(得分:6)

EditorFor辅助方法在某种程度上受到限制,但似乎还不支持HTML5 type="email"属性。

您现在的选项似乎是使用TextBoxFor或创建自定义模板,以便您设置输入的type属性。这里是another thread,其中介绍了创建自己的模板的一些选项。

DataAnnotation [DataType(DataType.EmailAddress)]实际上非常有用。它将表单字段的idname设置为email,您可以使用jQuery验证来显示用户客户端验证消息。将DataAnnotation应用于模型类还意味着模型上的电子邮件属性将在服务器端自动验证。如果您在应用中启用不显眼的验证,则几乎可以免费获得客户端和服务器端验证。

答案 2 :(得分:5)

作为 jortizromo 的答案的补充,您现在至少有两个选择:

  1. 在方法@type的{​​{1}}参数中指定htmlAttributes,如

    EditorFor()
  2. 在模型类定义中使用@Html.EditorFor(model => model.Email, new { htmlAttributes = new { @type = "email" } }) 命名空间中的EmailAddress注释属性用于相应的System.ComponentModel.DataAnnotations属性,并简单调用方法EditorFor()(这提供了HTML验证数据标签可能是一个好主意或坏主意,具体取决于您的任务),如

    视图模型

    Email

    Razor View

    [EmailAddress]
    public string Email { get; set; }