Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю
Создайте в проекте
AutoLot.ServicesUtilitiesStringExtensions.csStringExtensionsRemoveController()using System;namespace AutoLot.Mvc.Extensions{ public static class StringExtensions { public static string RemoveController(this string original) => original.Replace("Controller", "", StringComparison.OrdinalIgnoreCase); }}Создание базового класса
Создайте в проекте
AutoLot.MvcTagHelpersBaseBaseItemLinkTagHelperBase.csItemLinkTagHelperBaseTagHelperusing AutoLot.Mvc.Controllers;using AutoLot.Services.Utilities;using Microsoft.AspNetCore.Mvc;using Microsoft.AspNetCore.Mvc.Infrastructure;using Microsoft.AspNetCore.Mvc.Routing;using Microsoft.AspNetCore.Razor.TagHelpers;namespace AutoLot.Mvc.TagHelpers.Base{ public abstract class ItemLinkTagHelperBase : TagHelper { }}Добавьте конструктор, который принимает экземпляры реализаций
IActionContextAccessorIUrlHelperFactoryUrlHelperFactoryActionContextAccessorIUrlHelperprotected readonly IUrlHelper UrlHelper;protected ItemLinkTagHelperBase(IActionContextAccessor contextAccessor, IUrlHelperFactory urlHelperFactory){ UrlHelper = urlHelperFactory.GetUrlHelper(contextAccessor.ActionContext);}Добавьте открытое свойство для хранения
Idpublic int? ItemId { get; set; }При вызове вспомогательной функции дескриптора вызывается метод
Process()TagHelperContextTagHelperOutputTagHelperContextTagHelperOutputBuildContent()Process()protected void BuildContent(TagHelperOutput output, string actionName, string className, string displayText, string fontAwesomeName){ output.TagName = "a"; // Заменить <item-list> дескриптором <a>. var target = (ItemId.HasValue) ? UrlHelper.Action(actionName, nameof(CarsController).RemoveController(), new {id = ItemId}) : UrlHelper.Action(actionName, nameof(CarsController).RemoveController()); output.Attributes.SetAttribute("href", target); output.Attributes.Add("class",className); output.Content.AppendHtml($@"{displayText} <i class=""fas fa-{fontAwesomeName}""></i>");}В предыдущем код присутствует ссылка на набор инструментов для значков и шрифтов Font Awesome, который будет добавлен в проект позже в главе.
Вспомогательная функция дескриптора для вывода сведений об элементе
Создайте в каталоге
TagHelpersItemDetailsTagHelper.csItemDetailsTagHelperItemLinkTagHelperBaseusing AutoLot.Mvc.Controllers;using AutoLot.Mvc.TagHelpers.Base;using Microsoft.AspNetCore.Mvc.Infrastructure;using Microsoft.AspNetCore.Mvc.Routing;using Microsoft.AspNetCore.Razor.TagHelpers;namespace AutoLot.Mvc.TagHelpers{ public class ItemDetailsTagHelper : ItemLinkTagHelperBase