Tag-хэлперы в ASP.NET Core MVC. Введение

Tag-хэлперы в ASP.NET Core MVC, наравне с уже известными нам html-хэлперами предоставляют нам функциональность, необходимую для генерации html-разметки представлений. С tag-хэлперами мы уже сталкивались в теме о валидации моделей. Однако, на этом использование tag-хэлперов не ограничивается и поэтому, в этой части мы более подробно рассмотрим использование tag-хэлперов в ASP.NET Core MVC.

Ключевое отличие tag-хэлперов от html-хэлперов

Ключевое отличие tag-хэлперов от html-хэлпера заключается в том, что tag-хэлпер применяется непосредственно к элементу html, в то время, как html-хэлпер выступает в представлении как самостоятельный метод. Например, рассмотрим следующее представление ASP.NET Core MVC, в котором определена форма с использованием обычных html-элементов:

<form method='post' action='Home/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","Home",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)
}

Мы, как разработчики, прекрасно понимаем, что делает этот код. Но попробуйте передать код представления, скажем, web-дизайнеру. Вряд ли он что-то поймёт, если никогда не работал с ASP.NET Core MVC. В свою очередь, с использованием tag-хэлперов эта же форма может выглядеть вот так:

<form asp-action="Add" asp-controller="Home">
    <label asp-for="Id">ID:</label><br />
    <input type='number' name='id' asp-for="Id" /><br />
    <label asp-for="Title">Заголовок:</label><br />
    <input name='title' id="title" asp-for="Title" /><br />
    <label asp-for="Author">Автор:</label><br />
    <input name='author' id="author" asp-for="Author" /><br />
    <label asp-for="Body">Текст:</label><br />
    <textarea name="body" id="body" asp-for="Body"></textarea><br />
    <input type='submit' value='Отправить' />
</form>

С использованием tag-хэлперов код формы выглядит более привычно, так хэлперы применяются непосредственно к html-элементам и такой код может понять, в принципе, любой человек, хотя бы в общих чертах знакомый с HTML. Для большей наглядности расположим два варианта кода формы рядом:

Используем html-хэлперы Используем tag-хэлперы
@using(Html.BeginForm("Add","Home",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 asp-action="Add" asp-controller="Home">
    <label asp-for="Id">ID:</label><br />
    <input type='number' name='id' asp-for="Id" /><br />
    <label asp-for="Title">Заголовок:</label><br />
    <input name='title' id="title" asp-for="Title" /><br />
    <label asp-for="Author">Автор:</label><br />
    <input name='author' id="author" asp-for="Author" /><br />
    <label asp-for="Body">Текст:</label><br />
    <textarea name="body" id="body" asp-for="Body"></textarea><br />
    <input type='submit' value='Отправить' />
</form>

Подключение функциональности tag-хэлперов в ASP.NET Core MVC

Если создается пустой проект ASP.NET Core MVC, то по умолчанию, функциональность tag-хэлперов в таком проекте уже включена в файле _ViewImports.cshtml. В этом файле Вы можете увидеть строку:

@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers

которая представляет собой директиву Razor. Первый параметр директивы указывает на tag-хелперы, которые будут доступны в представлении (символ * означает, что используются все хэлперы), а второй параметр определяет библиотеку хелперов.

Если же вы с нуля подключаете в проект ASP.NET Core всю функциональность MVC, то вы можете использовать эту же директиву Razor в любых представлениях в вашем проекте.

Итого

Tag-хэлперы в ASP.NET Core MVC предоставляют функциональность для создания html-разметки приложений. В отличие от html-хэлперов, такая функциональность обладает, как минимум одним преимуществом, а именно — для создания разметки используются стандартные html-элементы в которых tag-хэлперы применяются как обычные атрибуты.

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