Представления в ASP.NET Core MVC. Строго типизированные html-хэлперы элементов форм

В предыдущей части мы рассмотрели различные 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-разметку в представлении.

Подписаться
Уведомить о
guest
0 Комментарий
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии