Чтение онлайн

ЖАНРЫ

Язык программирования C#9 и платформа .NET5
Шрифт:

<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;

}

Частичное

представление списка автомобилей

Списковые представления (одно для целого реестра автомобилей и одно для списка автомобилей по производителям) совместно используют частичное представление. Создайте в каталоге

Views\Cars
новый каталог по имени
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 приводится к нижнему регистру и отделяется символом переноса (что похоже на шашлык):

<item-create></item-create>

Для настройки таблицы и ее заголовков применяется вспомогательная функция HTML, посредством которой получаются значения

DisplayName
, связанные с каждым свойством. Для
DisplayName
будет выбираться значение атрибута
Display
или
DisplayName
, и если он не установлен, то будет использоваться имя свойства. В следующем разделе применяется блок кода Razor для отображения информации о производителе на основе ранее установленной переменной уровня представления:

<table class="table">

<thead>

<tr>

@if (showMake)

{

<th>

@Html.DisplayNameFor(model => model.MakeId)

</th>

}

<th>

@Html.DisplayNameFor(model => model.Color)

</th>

Поделиться с друзьями: