Tag-хэлперы в ASP.NET Core MVC. Создание tag-хэлперов

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

Пример собственного tag-хэлпера

Tag-хэлпер — это любой класс C#, реализующий интерфейс ITagHelper, однако, обычно, разработчики tag-хэлперов наследуют свой класс от класса TagHelper, что позволяет получить сразу доступ к важному методу — Process(). Попробуем создать свой первый tag-хэлпер, который будет выводить в представлении всего одну строку — день недели.

Создадим новый проект ASP.NET Core MVC и добавим в него папку TagHelpers. Создадим в папке новый файл с классом C# DayTagHelper.cs:

Теперь напишем «скелет» нашего tag-хэлпера следующим образом:

using Microsoft.AspNetCore.Razor.TagHelpers;

namespace AspNetMvcTagCreate.TagHelpers
{
    public class DayTagHelper: TagHelper
    {
        public override void Process(TagHelperContext context, TagHelperOutput output)
        {

        }
    }
}

Здесь стоит отметить, что мы используем в названии класса соглашение по умолчанию согласно которому классы, представляющие собой tag-хэлперы, имеют в названии суффикс TagHelper. Вся часть названия класса до этого суффикса будет использоваться ASP.NET Core MVC как название тэга хэлпера, то есть в разметке представления мы будем писать просто — <day>. Такое соглашение не обязательно к исполнению и мы могли бы назвать наш класс, например, просто Day, но следование этому и другим соглашениям по умолчанию позволяют сделать ваш код более понятным для других разработчиков.

Следующий момент — это переопределенный метод Process(). Именно в этом методе мы будем реализовывать логику нашего хэлпера. Метод принимает два параметра:

  • объект класса TagHelperContext контекст тега, который может содержать какие-либо данные, используемые для отображения, например, атрибуты тэга,
  • объект класса TagHelperOutput, который отвечает за генерацию выходного элемента html.

Более подробно с этими объектами мы познакомимся в следующих частях, а пока вернемся к нашему классу и напишем следующий код метода Process():

public override void Process(TagHelperContext context, TagHelperOutput output)
{
    output.TagName = "div";
    output.Content.SetContent($"Сегодня {DateTime.Now:dddd}");
}

В данном случае, мы воспользовались свойствами объекта для output и указали html-тег, на который будет заменяться тэг хэлпера (div) и определили содержимое тега — строку вида «Сегодня [день недели]«. Теперь необходимо подключить наш тег в приложении, чтобы им можно было воспользоваться в представлениях. Для подключения tag-хэлперов в проект мы должны воспользоваться директивой Razor @addTagHelper.

Если предполагается, что наш tag-хэлпер будет использоваться во многих представлениях проекта, то для его подключения лучше воспользоваться файлом _ViewImports.cshtm, иначе, если мы используем хэлпер в одном-двух представлениях, то можно использовать директиву @addTagHelper непосредственно в самом представлении.

Воспользуемся файлом _ViewImports.cshtm и подключим наш tag-хэлпер в проекте следующим образом:

@addTagHelper *, AspNetMvcTagCreate

здесь строка AspNetMvcTagCreate — это название сборки (проект в VS) в которой содержится tag-хэлпер, а символ * указывает на то, что будут доступны все tag-хэлперы из сборки. Такой способ подключения tag-хэлперов наиболее распространен, однако, можно использовать и такой способ подключения конкретного tag-хэлпера:

@addTagHelper AspNetMvcTagCreate.TagHelpers.DayTagHelper, AspNetMvcTagCreate

или такой (для подключения всех tag-хэлперов из определенного пространства имен:

@addTagHelper AspNetMvcTagCreate.TagHelpers.*, AspNetMvcTagCreate

После того, как tag-хэлпер каким-либо образом подключен в проект, можно им воспользоваться. Например, выведем день недели на главной странице приложения:

@{
    ViewData["Title"] = "Home Page";
}

<day></day>

<div class="text-center">
    <h1 class="display-4">Welcome</h1>
    <p>Learn about <a href="https://learn.microsoft.com/aspnet/core">building Web apps with ASP.NET Core</a>.</p>
</div>

Важно отметить, что конкретно сейчас неважно, что тэг <day> не содержит внутри себя никакой информации. Даже, если мы используем его так:

<day>День недели</day>

то строка внутри тэга не будет ничего значить и каким-либо образом выводиться — мы увидим точно такой же вывод, как и на рисунке выше.

Итого

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

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