KnigkinDom.org» » »📕 Язык программирования C#9 и платформа .NET5 - Эндрю Троелсен

Язык программирования C#9 и платформа .NET5 - Эндрю Троелсен

Книгу Язык программирования C#9 и платформа .NET5 - Эндрю Троелсен читаем онлайн бесплатно полную версию! Чтобы начать читать не надо регистрации. Напомним, что читать онлайн вы можете не только на компьютере, но и на андроид (Android), iPhone и iPad. Приятного чтения!

1 ... 393 394 395 396 397 398 399 400 401 ... 407
Перейти на страницу:

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать
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

  {

  }

}

Добавьте открытый конструктор, который принимает обязательные экземпляры и передает их конструктору базового класса:

public ItemDetailsTagHelper(

    IActionContextAccessor contextAccessor,

    IUrlHelperFactory urlHelperFactory)

      : base(contextAccessor, urlHelperFactory) {}

Переопределите метод Process(), чтобы вызывать метод BuildContent() базового класса:

public override void Process(TagHelperContext context, TagHelperOutput output)

{

  BuildContent(output,nameof(CarsController.Details),

              "text-info","Details","info-circle");

}

Код создает ссылку Details (Детали) с изображением значка информации из Font Awesome. Чтобы не возникали ошибки при компиляции, добавьте в CarsController базовый метод Details():

public IActionResult Details()

{

  return View();

}

Вспомогательная функция дескриптора для удаления элемента

Создайте в каталоге TagHelpers новый файл класса по имени ItemDeleteTagHelper.cs. Сделайте класс ItemDeleteTagHelper открытым и унаследованным от класса 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 ItemDeleteTagHelper : ItemLinkTagHelperBase

  {

  }

}

Добавьте открытый конструктор, который принимает обязательные экземпляры и передает их конструктору базового класса:

public ItemDeleteTagHelper(

    IActionContextAccessor contextAccessor,

    IUrlHelperFactory urlHelperFactory)

      : base(contextAccessor, urlHelperFactory) {}

Переопределите метод Process(), чтобы вызывать метод BuildContent() базового класса:

public override void Process(TagHelperContext context, TagHelperOutput output)

{

  BuildContent(output,nameof(CarsController.Delete),"text-danger","Delete","trash");

}

Код создает ссылку Delete (Удалить) с изображением значка мусорного ящика из Font Awesome. Чтобы не возникали ошибки при компиляции, добавьте в CarsController базовый метод Delete():

public IActionResult Delete()

{

  return View();

}

Вспомогательная функция дескриптора для редактирования сведений об элементе

Создайте в каталоге TagHelpers новый файл класса по имени ItemEditTagHelper.cs. Сделайте класс ItemEditTagHelper открытым и унаследованным от класса 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 ItemEditTagHelper : ItemLinkTagHelperBase

  {

  }

}

Добавьте открытый конструктор, который принимает обязательные экземпляры и передает их конструктору базового класса:

public ItemEditTagHelper(

    IActionContextAccessor contextAccessor,

    IUrlHelperFactory urlHelperFactory)

      : base(contextAccessor, urlHelperFactory) {}

Переопределите метод Process(), чтобы вызывать метод BuildContent() базового класса:

public override void Process(TagHelperContext context, TagHelperOutput output)

{

  BuildContent(output,nameof(CarsController.Edit),"text-warning","Edit","edit");

}

Код создает ссылку Edit (Редактировать) с изображением значка карандаша из Font Awesome. Чтобы не возникали ошибки при компиляции, добавьте в CarsController базовый метод Edit():

public IActionResult Edit()

{

  return View();

}

Вспомогательная функция дескриптора для создания элемента

Создайте в каталоге TagHelpers новый файл класса по имени itemCreateTagHelper.cs. Сделайте класс ItemCreateTagHelper открытым и унаследованным от класса 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 ItemCreateTagHelper : ItemLinkTagHelperBase

  {

  }

}

Добавьте открытый конструктор, который принимает обязательные экземпляры и передает их конструктору базового класса:

public ItemCreateTagHelper(

    IActionContextAccessor contextAccessor,

    IUrlHelperFactory urlHelperFactory)

      : base(contextAccessor, urlHelperFactory) {}

Переопределите метод Process(), чтобы вызывать метод BuildContent() базового класса:

public override void Process(TagHelperContext context, TagHelperOutput output)

{

  BuildContent(output,nameof(CarsController.Create),"text-success","Create new","plus");

}

Код создает ссылку Create new (Создать) с изображением значка плюса из Font Awesome.

Вспомогательная функция дескриптора для вывода списка элементов

Создайте в каталоге TagHelpers новый файл класса по имени

1 ... 393 394 395 396 397 398 399 400 401 ... 407
Перейти на страницу:
Отзывы - 0

Прочитали книгу? Предлагаем вам поделится своим отзывом от прочитанного(прослушанного)! Ваш отзыв будет полезен читателям, которые еще только собираются познакомиться с произведением.


Уважаемые читатели, слушатели и просто посетители нашей библиотеки! Просим Вас придерживаться определенных правил при комментировании литературных произведений.

  • 1. Просьба отказаться от дискриминационных высказываний. Мы защищаем право наших читателей свободно выражать свою точку зрения. Вместе с тем мы не терпим агрессии. На сайте запрещено оставлять комментарий, который содержит унизительные высказывания или призывы к насилию по отношению к отдельным лицам или группам людей на основании их расы, этнического происхождения, вероисповедания, недееспособности, пола, возраста, статуса ветерана, касты или сексуальной ориентации.
  • 2. Просьба отказаться от оскорблений, угроз и запугиваний.
  • 3. Просьба отказаться от нецензурной лексики.
  • 4. Просьба вести себя максимально корректно как по отношению к авторам, так и по отношению к другим читателям и их комментариям.

Надеемся на Ваше понимание и благоразумие. С уважением, администратор knigkindom.ru.


Партнер

Новые отзывы

  1. Гость Светлана Гость Светлана26 июль 20:11 Очень понравилась история)) Необычная, интересная, с красивым описанием природы, замков и башен, Очень переживала за счастье... Ледяной венец. Брак по принуждению - Ульяна Туманова
  2. Гость Диана Гость Диана26 июль 16:40 Автор большое спасибо за Ваше творчество, желаю дальнейших успехов. Книга затягивает, читаешь с удовольствием и легко. Мне очень... Королевство серебряного пламени - Сара Маас
  3. Римма Римма26 июль 06:40 Почему героиня такая тупая... Попаданка в невесту, или Как выжить в браке - Дина Динкевич
Все комметарии
Новое в блоге