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

на главную - закладки

Жанры

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

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>

<th>

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

</th>

<th></th>

</tr>

</thead>

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

DisplayFor
. Эта вспомогательная функция HTML ищет шаблон отображения с именем, соответствующим типу свойства, и если шаблон не обнаруживается, то разметка создается стандартным образом. Для каждого свойства объекта также выполняется поиск шаблона отображения, который применяется при его наличии. Например, если
Car
имеет свойство
DateTime
, то для него будет использоваться показанный ранее в главе шаблон
DisplayTemplate
.

В следующем блоке также задействованы специальные вспомогательные функции дескрипторов

item-edit
,
item-details
и
item-delete
, которые были добавлены ранее. Обратите внимание, что при передаче значений открытому свойству специальной вспомогательной функции имя свойства указывается с применением "шашлычного" стиля в нижнем регистре и добавляется к дескриптору в виде атрибута:

<tbody>

@foreach (var item in Model)

{

<tr>

@if (showMake)

{

<td>

@Html.DisplayFor(modelItem => item.MakeNavigation.Name)

</td>

}

<td>

@Html.DisplayFor(modelItem => item.Color)

</td>

<td>

@Html.DisplayFor(modelItem => item.PetName)

</td>

<td>

<item-edit item-id="@item.Id"></item-edit> |

<item-details item-id="@item.Id"></item-details> |

<item-delete item-id="@item.Id"></item-delete>

</td>

</tr>

}

</tbody>

</table>

Поделиться:
Популярные книги

Зубных дел мастер

Дроздов Анатолий Федорович
1. Зубных дел мастер
Фантастика:
научная фантастика
попаданцы
альтернативная история
5.00
рейтинг книги
Зубных дел мастер

Бывшие. Война в академии магии

Берг Александра
2. Измены
Любовные романы:
любовно-фантастические романы
7.00
рейтинг книги
Бывшие. Война в академии магии

Идеальный мир для Лекаря 7

Сапфир Олег
7. Лекарь
Фантастика:
юмористическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 7

Возвышение Меркурия. Книга 3

Кронос Александр
3. Меркурий
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Возвышение Меркурия. Книга 3

Кодекс Охотника. Книга X

Винокуров Юрий
10. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
6.25
рейтинг книги
Кодекс Охотника. Книга X

Хозяин Теней

Петров Максим Николаевич
1. Безбожник
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Хозяин Теней

Опасная любовь командора

Муратова Ульяна
1. Проклятые луной
Фантастика:
фэнтези
5.00
рейтинг книги
Опасная любовь командора

Друд, или Человек в черном

Симмонс Дэн
Фантастика:
социально-философская фантастика
6.80
рейтинг книги
Друд, или Человек в черном

Волхв

Земляной Андрей Борисович
3. Волшебник
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Волхв

Мастер Разума VII

Кронос Александр
7. Мастер Разума
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Мастер Разума VII

Всемирная энциклопедия афоризмов. Собрание мудрости всех народов и времен

Агеева Елена А.
Документальная литература:
публицистика
5.40
рейтинг книги
Всемирная энциклопедия афоризмов. Собрание мудрости всех народов и времен

Сумеречный Стрелок 5

Карелин Сергей Витальевич
5. Сумеречный стрелок
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Сумеречный Стрелок 5

Морской волк. 1-я Трилогия

Савин Владислав
1. Морской волк
Фантастика:
альтернативная история
8.71
рейтинг книги
Морской волк. 1-я Трилогия

Прогрессор поневоле

Распопов Дмитрий Викторович
2. Фараон
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Прогрессор поневоле