Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю
На нашем сайте KnigaRead.com Вы можете абсолютно бесплатно читать книгу онлайн Троелсен Эндрю, "Язык программирования C#9 и платформа .NET5" бесплатно, без регистрации.
Создайте в проекте
AutoLot.Services
Utilities
StringExtensions.cs
StringExtensions
RemoveController()
using System;
namespace AutoLot.Mvc.Extensions
{
public static class StringExtensions
{
public static string RemoveController(this string original)
=> original.Replace("Controller", "", StringComparison.OrdinalIgnoreCase);
}
}
Создание базового класса
Создайте в проекте
AutoLot.Mvc
TagHelpers
Base
Base
ItemLinkTagHelperBase.cs
ItemLinkTagHelperBase
TagHelper
using 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
{
}
}
Добавьте конструктор, который принимает экземпляры реализаций
IActionContextAccessor
IUrlHelperFactory
UrlHelperFactory
ActionContextAccessor
IUrlHelper
protected readonly IUrlHelper UrlHelper;
protected ItemLinkTagHelperBase(IActionContextAccessor contextAccessor,
IUrlHelperFactory
urlHelperFactory)
{
UrlHelper = urlHelperFactory.GetUrlHelper(contextAccessor.ActionContext);
}
Добавьте открытое свойство для хранения
Id
public int? ItemId { get; set; }
При вызове вспомогательной функции дескриптора вызывается метод
Process()
TagHelperContext
TagHelperOutput
TagHelperContext
TagHelperOutput
BuildContent()
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, который будет добавлен в проект позже в главе.
Вспомогательная функция дескриптора для вывода сведений об элементе
Создайте в каталоге
TagHelpers
ItemDetailsTagHelper.cs
ItemDetailsTagHelper
ItemLinkTagHelperBase
using 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