Содержание
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-тегом с названием, соответствующим названию класса без суффикса.
