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

Sha*_*anc 12 asp.net-mvc data-annotations razor

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

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

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

Ank*_*ngh 15

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

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


jor*_*omo 11

它似乎现在得到支持.

@Html.EditorFor(model => model.Email, new { htmlAttributes = new { @class = "form-control", @type = "email" } })
Run Code Online (Sandbox Code Playgroud)


Jos*_*arl 7

EditorFor辅助方法,在一定程度上限制了箱子,还没有出现支持HTML5 type="email"属性.

您现在的选项似乎是使用TextBoxFor或创建一个允许您设置输入type属性的自定义模板.这是另一个审查创建自己的模板的选项的线程.

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


Luc*_*ain 5

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

  1. @typehtmlAttributes方法的参数中指定,EditorFor()

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

    视图模型

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

    剃刀视图

    @Html.EditorFor(model => model.Email)
    
    Run Code Online (Sandbox Code Playgroud)