@ Html.EditorFor Как сделать атрибут type = "email" - PullRequest
11 голосов
/ 26 марта 2012

Я могу сделать это легко, используя TextBoxFor, но как мне сделать это с EditorFor?

Я решил использовать DataAnnotation [DataType(DataType.EmailAddress)], но это не сработало.

Я не совсем понимаю, что на самом деле делает аннотация DataType, потому что на первый взгляд она вообще ничего не делает.

Ответы [ 4 ]

15 голосов
/ 12 февраля 2014

Вы можете переопределить атрибуты HTML, к которым браузер откатится до type='text', если они его не поддерживают:

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

11 голосов
/ 11 апреля 2016

похоже, что сейчас поддерживается.

@Html.EditorFor(model => model.Email, new { htmlAttributes = new { @class = "form-control", @type = "email" } })
6 голосов
/ 26 марта 2012

Вспомогательный метод EditorFor несколько ограничен и не поддерживает атрибут HTML5 type="email".

Ваши параметры сейчас, похоже, либо используют TextBoxFor, либо создают собственный шаблон, который позволит вам установить атрибут type для ввода. Вот другой поток , в котором рассматриваются некоторые варианты создания собственных шаблонов.

DataAnnotation [DataType(DataType.EmailAddress)] на самом деле весьма полезен. Он устанавливает id и name поля формы на email, которое вы можете использовать с проверкой jQuery для отображения пользовательских сообщений проверки на стороне клиента. Применение DataAnnotation к вашему классу модели также означает, что свойство электронной почты вашей модели будет автоматически проверено на стороне сервера. Если вы включите ненавязчивую проверку в своем приложении, вы получите проверку на стороне клиента и на сервере почти бесплатно.

5 голосов
/ 07 июня 2016

В дополнение к ответу jortizromo теперь у вас есть как минимум две опции:

  1. Указание @type в параметре htmlAttributes для методаEditorFor() как в

    @Html.EditorFor(model => model.Email, new { htmlAttributes = new { @type = "email" } })
    
  2. Использование атрибута аннотации EmailAddress из пространства имен System.ComponentModel.DataAnnotations в определении класса модели для соответствующего свойства Email и простого вызова методаEditorFor () (предоставляет теги данных проверки HTML, которые могут быть хорошей или плохой идеей в зависимости от вашей задачи), как в

    ViewModel

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

    Razor View

    @Html.EditorFor(model => model.Email)
    
...