Язык программирования C#9 и платформа .NET5 - Эндрю Троелсен
{
"version": "1.0",
"defaultProvider": "cdnjs",
"defaultDestination": "wwwroot/lib",
"libraries": [
{
"library": "[email protected]",
"destination": "wwwroot/lib/jquery",
"files": [ "jquery.js", "jquery.min.js" ]
},
{
"library": "[email protected]",
"destination": "wwwroot/lib/jquery-validation",
"files": [ "jquery.validate.js", "jquery.validate.min.js",
"additional-methods.js", "additional-methods.min.js" ]
},
{
"library": "[email protected]",
"destination": "wwwroot/lib/jquery-validation-unobtrusive",
"files": [ "jquery.validate.unobtrusive.js",
"jquery.validate.unobtrusive.min.js" ]
},
{
"library": "[email protected]",
"destination": "wwwroot/lib/bootstrap",
"files": [
"css/bootstrap.css",
"js/bootstrap.bundle.js",
"js/bootstrap.js"
]
},
{
"library": "[email protected]",
"destination": "wwwroot/lib/font-awesome/",
"files": [
"js/all.js",
"css/all.css",
"sprites/brands.svg",
"sprites/regular.svg",
"sprites/solid.svg",
"webfonts/fa-brands-400.eot",
"webfonts/fa-brands-400.svg",
"webfonts/fa-brands-400.ttf",
"webfonts/fa-brands-400.woff",
"webfonts/fa-brands-400.woff2",
"webfonts/fa-regular-400.eot",
"webfonts/fa-regular-400.svg",
"webfonts/fa-regular-400.ttf",
"webfonts/fa-regular-400.woff",
"webfonts/fa-regular-400.woff2",
"webfonts/fa-solid-900.eot",
"webfonts/fa-solid-900.svg",
"webfonts/fa-solid-900.ttf",
"webfonts/fa-solid-900.woff",
"webfonts/fa-solid-900.woff2"
]
}
]
}
На заметку! Вскоре будет объяснена причина отсутствия в списке минифицированных файлов.
После сохранения libman.json (в Visual Studio) файлы будут загружены в каталог wwwrootlib проекта. Если же вы работаете в командной строке, тогда введите следующую команду, чтобы перезагрузить все файлы:
libman restore
Доступны дополнительные параметры командной строки, которые можно просмотреть с помощью команды libman -h.
Обновление ссылок на файлы JavaScript и CSS
С переходом на диспетчер библиотек местоположение многих файлов JavaScript и CSS изменилось. Файлы Bootstrap и jQuery были загружены в каталог dist. Кроме того, в приложение был добавлен набор инструментов для значков и шрифтов Font Awesome.
Местоположение файлов Bootstrap необходимо изменить на ~/lib/boostrap/css вместо ~/lib/boostrap/dist/css. Добавьте Font Awesome в конец, прямо перед site.css. Модифицируйте файл _Head.cshtml, как показано ниже:
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>@ViewData["Title"] - AutoLot.Mvc</title>
<environment include="Development">
<link rel="stylesheet" href="~/lib/bootstrap/css/bootstrap.css"
asp-append-version="true"/>
</environment>
<environment exclude="Development">
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/
bootstrap.min.css"
asp-fallback-href="~/lib/bootstrap/css/bootstrap.css"
asp-fallback-test-class="sr-only"
asp-fallback-test-property="position"
asp-fallback-test-value="absolute"
crossorigin="anonymous"
integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/
iJTQUOhcWr7x9JvoRxT2MZw1T"/>
</environment>
<link rel="stylesheet" href="~/lib/font-awesome/css/all.css"
asp-append-version="true"/>
<link rel="stylesheet" href="~/css/site.css"
asp-append-version="true"/>
Далее модифицируйте файл JavaScriptFiles.cshtml, удалив dist из местоположений jQuery и Bootstrap:
<environment include="Development">
<script src="~/lib/jquery/jquery.js" asp-append-version="true"></script>
<script src="~/lib/bootstrap/js/bootstrap.bundle.js"
asp-append-version="true"></script>
</environment>
<environment exclude="Development">
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.min.js"
asp-fallback-src="~/lib/jquery/jquery.min.js"
asp-fallback-test="window.jQuery"
crossorigin="anonymous"
integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8=">
</script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/js/
bootstrap.bundle.min.js"
asp-fallback-src="~/lib/bootstrap/js/bootstrap.bundle.min.js"
asp-fallback-test="window.jQuery && window.jQuery.fn && window.jQuery.fn.modal"
crossorigin="anonymous"
integrity="sha384-xrRywqdh3PHs8keKZN+8zzc5TX0GRTLCcmivcbNJWm2rs5C
8PRhcEn3czEjhAO9o">
</script>
</environment>
<script src="~/js/site.js" asp-append-version="true"></script>
Финальное изменение связано с обновлением местоположений jquery.validate в частичном представлении _ValidationScriptsPartial.cshtml:
<environment include="Development">
<script src="~/lib/jquery-validation/jquery.validate.js"
asp-append-version="true"></script>
<script src="~/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.js"
asp-append-version="true"></script>
</environment>
<environment exclude="Development">
<script src="https://cdnjs.cloudflare.com/ajax/libs/
jquery-validate/1.19.1/jquery.validate.min.js"
asp-fallback-src="~/lib/jquery-validation/jquery.validate.min.js"
asp-fallback-test="window.jQuery && window.jQuery.validator"
crossorigin="anonymous"
integrity="sha256-F6h55Qw6sweK+t7SiOJX+2bpSAa3b/fnlrVCJvmEj1A=">
</script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/
jquery-validation-unobtrusive/3.2.11/jquery.validate.unobtrusive.min.js"
asp-fallback-src="~/lib/jquery-validation-unobtrusive/
jquery.validate.unobtrusive.min.js"
asp-fallback-test="window.jQuery && window.jQuery.validator &&
window.jQuery.validator.unobtrusive"
crossorigin="anonymous"
integrity="sha256-9GycpJnliUjJDVDqP0UEu/bsm9U+3dnQUH8+3W10vkY=">
</script>
</environment>
Завершение работы над представлениями CarsController и Cars
В этом разделе будет завершена работа над представлениями CarsController и Cars. Если вы установите в true флаг RebuildDatabase внутри файла appsettings.development.json, тогда любые изменения,внесенные вами во время тестирования этих представлений, будут сбрасываться при следующем запуске приложения.
Класс CarsController
Класс CarsController является центральной точкой приложения AutoLot.Mvc, обладая возможностями создания, чтения, обновления и удаления. В этой версии CarsController напрямую используется уровень доступа к данным. Позже в главе вы создадите еще одну версию CarsController, в которой для доступа к данным будет применяться служба AutoLot.Api.
Приведите операторы using в классе CarsController к следующему виду:
using AutoLot.Dal.Repos.Interfaces;
using AutoLot.Models.Entities;
using AutoLot.Services.Logging;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Rendering;
Ранее вы добавили класс контроллера с маршрутом. Теперь наступило время добавить экземпляры реализаций ICarRepo и IAppLogging<CarsController> через внедрение зависимостей. Добавьте две переменные уровня класса для хранения этих экземпляров, а также конструктор, который будет внедрять оба экземпляра:
private readonly ICarRepo _repo;
private readonly IAppLogging<CarsController> _logging;
public CarsController(ICarRepo repo, IAppLogging<CarsController> logging)
{
_repo = repo;
_logging = logging;
}
Частичное представление списка автомобилей
Списковые представления (одно для целого реестра автомобилей и одно для списка автомобилей по производителям) совместно используют частичное представление. Создайте в каталоге ViewsCars новый каталог по имени Partials и добавьте в него файл представления _CarListPartial.cshtml, очистив его содержимое. Установите IEnumerable<Car> в качестве типа (его ненужно указывать полностью, поскольку в файл _ViewImports.cshtml добавлено пространство имен AutoLot.Models.Entities):
@model IEnumerable< Car>
Далее добавьте блок кода Razor с набором булевских переменных, которые указывают, должны ли отображаться производители. Когда частичное представление CarListPartial.cshtml применяется полным реестром автомобилей, производители будут показаны, а когда отображаются автомобили только одного производителя, то поле Make должно быть скрыто:
@{
var showMake = true;
if (bool.TryParse(ViewBag.ByMake?.ToString(), out bool byMake))
{
showMake = !byMake;
}
}
В следующей разметке ItemCreateTagHelper используется для создания ссылки на метод Create() типа HttpGet. В случае применения специальных вспомогательных функций дескрипторов имя указывается с использованием "шашлычного" стиля в нижнем регистре, т.е. суффикс TagHelper отбрасывается, а каждое слово в стиле Pascal приводится к