Что такое Tag Helpers в ASP.NET Core?

Ответ

Tag Helpers — это компоненты в ASP.NET Core MVC, которые позволяют серверному коду участвовать в создании и отрисовке HTML-элементов в Razor-файлах. Они являются более читаемой и естественной альтернативой HTML-хелперам.

Основные идеи:

  • Внешне они выглядят как стандартные HTML-теги или атрибуты.
  • Они обрабатываются на сервере перед отправкой HTML клиенту.
  • Обеспечивают строгую типизацию и поддержку IntelliSense в средах разработки.

Примеры встроенных Tag Helpers:

<!-- Anchor Tag Helper (заменяет Html.ActionLink) -->
<a asp-controller="Home" asp-action="Index">Home</a>
<!-- Генерирует: <a href="/Home/Index">Home</a> -->

<!-- Form Tag Helper -->
<form asp-action="Create" method="post">
    <!-- Input Tag Helper (связывается с моделью) -->
    <input asp-for="Product.Name" class="form-control" />
    <!-- Генерирует атрибуты id, name, type, validation и т.д. -->
</form>

<!-- Environment Tag Helper -->
<environment include="Development">
    <script src="unminified-debug-script.js"></script>
</environment>
<environment exclude="Development">
    <script src="minified-production-script.js"></script>
</environment>

Преимущества перед HTML-хелперами:

  1. Более интуитивный синтаксис: Напоминает обычный HTML, что удобно для фронтенд-разработчиков.
  2. Гибкость: Можно комбинировать с любыми HTML-атрибутами.
  3. Лучшая поддержка инструментов: Современные редакторы кода обеспечивают подсветку и подсказки для атрибутов, начинающихся с asp-.
  4. Простота создания своих: Можно легко создать кастомный Tag Helper, унаследовавшись от TagHelper и переопределив метод Process.

Tag Helpers стали стандартным и предпочтительным способом генерации динамического HTML в Razor-представлениях ASP.NET Core.

Ответ 18+ 🔞

Ну, смотри, чтобы ты понимал масштаб этой дичи. Tag Helpers в ASP.NET Core — это такие штуки, которые позволяют твоему серверному коду лезть в HTML и наводить там свои порядки прямо в Razor-файлах. По сути, это как более адекватная замена тем старым HTML-хелперам, от которых глаза кровоточили.

Если по-простому:

  • С виду — обычные HTML-теги или их атрибуты, ничё не заподозришь.
  • Но на самом деле, пока страница на сервере собирается, они просыпаются и начинают свою магию.
  • За счёт этого в редакторе у тебя IntelliSense работает, как швейцарские часы, и всё строго типизировано. Красота, блядь.

Вот смотри, как они выглядят в деле:

<!-- Раньше бы писали Html.ActionLink, а сейчас вот так, натуральнее -->
<a asp-controller="Home" asp-action="Index">На главную</a>
<!-- А в итоге в браузер улетит: <a href="/Home/Index">На главную</a> -->

<!-- Форма тоже становится умной -->
<form asp-action="Create" method="post">
    <!-- Этот инпут уже знает про твою модель! -->
    <input asp-for="Product.Name" class="form-control" />
    <!-- Он сам нагенерит id, name, type и даже валидацию прилепит, если надо -->
</form>

<!-- А это вообще песня, для разных окружений -->
<environment include="Development">
    <script src="unminified-debug-script.js"></script>
</environment>
<environment exclude="Development">
    <script src="minified-production-script.js"></script>
</environment>
<!-- На проде первый блок вырежется нахуй, а второй останется -->

И почему это, блядь, лучше старых хелперов?

  1. Читаемость. Фронтендер посмотрит — ну HTML и HTML, чё бубнить. Не то что эти ломаные конструкции в C#.
  2. Гибкость. Хочешь — добавляй свои class или data-атрибуты рядом с asp-*. Никто тебе не запретит.
  3. Поддержка в редакторе. Начинаешь писать asp- — и тебе сразу вываливается список, что можно прикрутить. Не надо гадать.
  4. Свои наколеночные — раз плюнуть. Наследовался от TagHelper, переопределил метод Process — и вот ты уже волшебник, который делает свою собственную хуйню.

Короче, Tag Helpers — это сейчас де-факто стандартный способ в ASP.NET Core делать динамическую разметку. Оно и логично — удобнее же, ёпта.