В предыдущей части мы рассмотрели различные html-хэлперы элементов форм, которые могут применяться для генерации html-разметки. При этом, в ASP.NET Core MVC также присутствуют строго типизированные html-хэлперы элементов форм. По сути — это двойники ранее рассмотренных хэлперов, но этот вид хелперов принимает в качестве параметра делегат, с помощью которого указывается свойство модели, к которому должен быть привязан данный хелпер. Отличительная черта строго типизированного хэлпера — наличие суффикса For
.
Пример использования строго типизированных хэлперов
Создадим новое приложение ASP.NET Core MVC и добавим в папку Models файл Post.cs, содержащий следующим класс:
public class Post { public int Id { get; set; } public string Title { get; set; } public string Author { get; set; } public string Body { get; set; } }
Для добавления объектов этого класса в приложение, например, в БД мы могли бы использовать в представлении следующую форму, например, в представлении Views/Home/Index.cshtml:
<form method='post' action='Post/Add'> <label for="id">ID:</label><br /> <input type='number' name='id' id="id"/><br /> <label for="title">Заголовок:</label><br /> <input name='title' id="title"/><br /> <label for="author">Автор:</label><br /> <input name='author' id="author"/><br /> <label for="body">Текст:</label><br /> <textarea name="body" id="body"></textarea><br/> <input type='submit' value='Отправить' /> </form>
Используем для генерации этой формы строго типизированные html-хэлперы. Первое, что нам необходимо сделать — это определить в представлении тип модели:
@using(Html.BeginForm("Add","Post",FormMethod.Post)) { @Html.LabelFor(m=>m.Id, "ID:") <br /> @Html.TextBoxFor(mbox=>mbox.Id, new{type="number"}) <br /> @Html.LabelFor(m=>m.Title, "Заголовок:") <br /> @Html.TextBoxFor(mbox=>mbox.Title) <br /> @Html.LabelFor(m=>m.Author, "Автор:") <br /> @Html.TextBoxFor(mbox=>mbox.Author) <br /> @Html.LabelFor(m=>m.Body, "Текст:") <br /> @Html.TextAreaFor(mbox=>mbox.Body) }
В итоге будет сгенерирована форма со следующей разметкой:
<form action="/Post/Add" method="post"><label for="Id">ID:</label> <br /> <input data-val="true" data-val-required="The Id field is required." id="Id" name="Id" type="number" value="" /> <br /> <label for="Title">Заголовок:</label> <br /> <input data-val="true" data-val-required="The Title field is required." id="Title" name="Title" type="text" value="" /> <br /> <label for="Author">Автор:</label> <br /> <input data-val="true" data-val-required="The Author field is required." id="Author" name="Author" type="text" value="" /> <br /> <label for="Body">Текст:</label> <br /> <textarea data-val="true" data-val-required="The Body field is required." id="Body" name="Body"> </textarea> <input name="__RequestVerificationToken" type="hidden" value="CfDJ8F-cW7GXuzBHuhFhRkcFZJEQJALZneFBwBgYjFnz9TesMZjVyzcbdMlHQdDlEA7Zf2ZZMjJSz63oEzaND0NP27gnN4nIfTTSe-DlqQXYj90wxQNdzIiIspOp8Rhlxm7oPHMqhXBZVBySrnWy4d2C804" /> </form>
Отличием является то, что для элементов формы были добавлены атрибуты:
data-val-required="The Title field is required."
Что это за атрибуты — мы более подробно узнаем, когда будем разбираться с моделями в ASP.NET Core MVC.
В остальном же, мы сгенерировали форму, как и в предыдущий раз — со скрытым полем __RequestVerificationToken
. При этом, все поля формы были привязаны к свойствам модели, тип которой мы указали в директиве @model.
Оставшиеся строго типизированные html-хэлперы работают аналогичным образом — необходимо указать свойство модели к которому привязывается хэлпер и дополнительные данные, если таковые требуются. Ниже приведем только список имеющихся на данный момент в ASP.NET Core MVC строго типизированных хэлперов и ссылки на примеры с обычными хэлперами по которым можно будет понять, что генерируется в представлении.
Строго типизированный хэлпер | Аналог | Описание | Ссылка на пример |
Html.LabelFor |
Html.Label |
Создает метку для поля формы | пример |
Html.TextBoxFor |
Html.TextBox |
Создает поле ввода | пример |
Html.TextAreaFor |
Html.TextArea |
Создает многострочное текстовое поле | пример |
Html.CheckBoxFor |
Html.CheckBox |
Создает флажок checkbox | пример |
Html.RadioButtonFor |
Html.RadioButton |
Создает переключатель | пример |
Html.HiddenFor |
Html.Hidden |
Создает скрытое поле | пример |
Html.PasswordFor |
Html.Password |
Создает поле ввода пароля | пример |
Html.DropDownListFor |
Html.DropDownList |
Создает выпадающий список элементов | пример |
Html.ListBoxFor |
Html.ListBox |
Создает список элементов с возможностью множественного выбора | пример |
Итого
Строго типизированные html-хэлперы можно применять в представлениях у которых определен тип передаваемой из контроллера модели (директива @model). Такие хэлперы привязываются с помощью делегата к определенному полю модели. В остальном, их действие такое же, как и у обычных хэлперов — они генерируют определенную html-разметку в представлении.