class="code">ItemListTagHelper.cs. Сделайте класс
ItemListTagHelper
открытым и унаследованным от класса
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 ItemListTagHelper : ItemLinkTagHelperBase
{
}
}
Добавьте открытый конструктор, который принимает обязательные экземпляры и передает их конструктору базового класса:
public ItemListTagHelper(
IActionContextAccessor contextAccessor,
IUrlHelperFactory urlHelperFactory)
: base(contextAccessor, urlHelperFactory) {}
Переопределите метод Process()
, чтобы вызывать метод BuildContent()
базового класса:
public override void Process(TagHelperContext context, TagHelperOutput output)
{
BuildContent(output,nameof(CarsController.Index),
"text-default","Back to List","list");
}
Код создает ссылку Back to List (Список) с изображением значка списка из Font Awesome. Чтобы не возникали ошибки при компиляции, добавьте в CarsController
базовый метод Index()
:
public IActionResult Index()
{
return View();
}
Обеспечение видимости специальных вспомогательных функций дескрипторов
Чтобы сделать специальные вспомогательные функции дескрипторов видимыми, потребуется выполнить команду @addTagHelper
для представлений, которые используют эти вспомогательные функции дескрипторов, или поместить ее в файл _ViewImports.cshtml
. Откройте файл _ViewImports.cshtml
в каталоге Views и добавьте в него следующую строку:
@addTagHelper *, AutoLot.Mvc
Вспомогательные функции HTML
Вспомогательные функции HTML из ASP.NET MVC по-прежнему поддерживаются, а некоторые из них применяются довольно широко и перечислены в табл. 31.5.
Вспомогательная функция DisplayFor()
Вспомогательная функция DisplayFor()
отображает объект, определяемый выражением. Если для отображаемого типа существует шаблон отображения, тогда он будет применяться при создании HTML-разметки, представляющей элемент. Например, если моделью представления является сущность Car
, то информацию о производителе автомобиля можно отобразить следующим образом:
@Html.DisplayFor(x=>x.MakeNavigation);
Если в каталоге DisplayTemplates
присутствует представление по имени Make.cshtml
, тогда оно будет использоваться для визуализации значений (вспомните, что поиск имени шаблона базируется на типе объекта, а не на имени его свойства). Если представление по имени ShowMake.cshtml
(например) существует, то оно будет применяться для визуализации объекта с помощью приведенного ниже вызова:
@Html.DisplayFor(x=>x.MakeNavigation, "ShowMake");
В случае если шаблон не указан и отсутствует представление с именем класса, тогда для создания HTML-разметки, подлежащей отображению, используется рефлексия.
Вспомогательная функция DisplayForModel()
Вспомогательная функция DisplayForModel()
отображает модель для представления. Если для отображаемого типа существует шаблон отображения, то он будет применяться при создании HTML-разметки, представляющей элемент. Продолжая предыдущий пример представления с сущностью Car
в качестве модели, полную информацию Car
можно отобразить следующим образом:
@Html.DisplayForModel();
Как и в случае со вспомогательной функцией DisplayFor()
, если существует шаблон отображения, имеющий имя типа, тогда он будет использоваться. Можно также применять именованные шаблоны. Скажем, для отображения сущности Car
с помощью шаблона отображения CarWithColors.html
необходимо использовать такой вызов:
@Html.DisplayForModel("CarWithColors");
Если шаблон не указан и отсутствует представление с именем класса, то для создания HTML-разметки, подлежащей отображению, используется рефлексия.
Вспомогательные функции EditorFor() и EditorForModel()
Вспомогательные функции EditorFor()
и EditorForModel()
работают аналогично соответствующим вспомогательным функциям для отображения, но с тем отличием, что шаблоны ищутся в каталоге EditorTemplates
и вместо представления объекта, предназначенного только для чтения, отображаются HTML-формы редакторов.
Управление библиотеками клиентской стороны
До завершения представлений нужно обновить библиотеки клиентской стороны (CSS и JavaScript). Проект диспетчера библиотек LibraryManager (первоначально разрабатываемый Мэдсом Кристенсеном) теперь является частью Visual Studio (VS2019) и также доступен в виде глобального инструмента .NET Core. Для извлечения инструментов CSS и JavaScript из CDNJS.com
, UNPKG.com
, jsDelivr.com
или файловой системы в LibraryManager
используется простой файл JSON.
Установка диспетчера библиотек как глобального инструмента .NET Core
Диспетчер библиотек встроен в Visual Studio. Чтобы установить его как глобальный инструмент .NET Core, введите следующую команду:
dotnet tool install --global Microsoft.Web.LibraryManager.Cli --version 2.1.113
Текущая версия диспетчера библиотек доступна по ссылке https://www.nuget.org/packages/Microsoft.Web.LibraryManager.Cli/
.
Добавление в проект AutoLot.Mvc библиотек клиентской стороны
При создании проекта AutoLot.Mvc
(с помощью Visual Studio или командной строки .NET Core CLI) в каталог wwwrootlib
было установлено несколько файлов JavaScript и CSS. Удалите каталог lib
вместе со всеми содержащимися в нем файлами, т.к. все они будут заменены диспетчером библиотек.
Добавление файла libman.json
Файл libman.json
управляет тем, что именно устанавливается, из каких источников и куда попадают установленные файлы.
Если вы работаете в Visual Studio, тогда щелкните правой кнопкой мыши на имени проекта AutoLot.Mvc
и выберите в контекстном меню пункт Manage Client-Side Libraries (Управлять библиотеками клиентской стороны), в результате чего в корневой каталог проекта добавится файл libman.json
. В Visual Studio также есть возможность связать диспетчер библиотек с процессом MSBuild. Щелкните правой кнопкой мыши на имени файла libman.json
и выберите в контекстном меню пункт Enable restore on build (Включить восстановление при сборке). Вам будет предложено разрешить другому пакету NuGet (Microsoft.Web.LibraryManager.Build
) восстановиться в проекте. Разрешите установку пакета.
Создайте новый файл libman.json
посредством следующей команды (она устанавливает CDNJS.com
в качестве стандартного поставщика):
libman init --default-provider cdnjs
Обновление файла libman.json
Для поиска библиотек, подлежащих установке, сеть доставки содержимого CDNJS.com
предлагает удобный для человека API-интерфейс. Список всех доступных библиотек можно просмотреть по следующему URL:
https://api.cdnjs.com/libraries?output=human
Найдя библиотеку, которую вы хотите установить, модифицируйте URL, указав имя библиотеки из списка, чтобы увидеть ее версии и файлы для каждой версии. Например, для просмотра всех доступных версий и файлов jQuery используйте такую ссылку:
https://api.cdnjs.com/libraries/jquery?output=human
После выбора версии и файлов для установки добавьте имя библиотеки (плюс версию), место назначения (обычно wwwroot/lib/<ИмяБиблиотеки>
) и файлы, которые требуется загрузить. Скажем, чтобы загрузить jQuery, введите в массив JSON библиотеки следующий код:
{
"library": "jquery@3.5.1",
"destination": "wwwroot/lib/jquery",
"files": [ "jquery.js"]
}
Ниже приведено полное содержимое файла