Создание специального тег-хелпера для условного скрытия элементов¶
Для того, чтобы проконтролировать отображение элемента в шаблоне Razor, обычно используют подобную конструкцию:
Однако на практике использование такой конструкции может оказаться неудобным, так как усложняет использование редакторов HTML, а переключение между C# и HTML может быть утомительным.
Создадим тег-хелпер
if, чтобы избежать этой проблемы. Тег-хелпер будет применяться в качестве атрибута:Вот код такого тег-хелпера:
[HtmlTargetElement(Attributes = "if")]
public class IfTagHelper: TagHelper
{
[HtmlAttributeName("if")]
public bool RenderContent { get; set; } = true;
public override void Process(
TagHelperContext context, TagHelperOutput output)
{
if(RenderContext == false)
{
output.TagName = null;
output.SuppressOutput();
}
}
public override int Order => int.MinValue;
}
Здесь:
- задавая значение для свойства
Attributesв атрибутеHtmlTargetElement, мы гарантируем, что тег-хелпер будет запускаться атрибутомif. Это позволяет применять тег-хелпер к любому HTML-элементу с этим атрибутом; [HtmlAttributeName("if")]связывает атрибутifсо свойствомRenderContent;- в случае
RenderContent == falseмы удаляем элемент, записывая вoutput.TagNameзначениеnull; - используем
output.SupressOutput()для запрещения отрисовки содержимого элемента с атрибутом; - переопределяем свойство
Order- это гарантирует нам, чтоIfTagHelperбудет выполнен первым в случае, если к элементу применено несколько тег-хелперов.
Примечание
Важно не забыть зарегистрировать свои тег-хелперы в файле _ViewImports.cshtml при помощи директивы @addTagHelper.
Последнее обновление :
10 мая 2023 г.
Дата создания : 27 октября 2022 г.
Дата создания : 27 октября 2022 г.