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

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

Жанры

Язык программирования 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>

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

Черный маг императора 3

Герда Александр
3. Черный маг императора
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Черный маг императора 3

Повелитель механического легиона. Том VIII

Лисицин Евгений
8. Повелитель механического легиона
Фантастика:
технофэнтези
аниме
фэнтези
5.00
рейтинг книги
Повелитель механического легиона. Том VIII

Пипец Котенку! 3

Майерс Александр
3. РОС: Пипец Котенку!
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Пипец Котенку! 3

Разбуди меня

Рам Янка
7. Серьёзные мальчики в форме
Любовные романы:
современные любовные романы
остросюжетные любовные романы
5.00
рейтинг книги
Разбуди меня

Боги, пиво и дурак. Том 6

Горина Юлия Николаевна
6. Боги, пиво и дурак
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Боги, пиво и дурак. Том 6

Болотник 2

Панченко Андрей Алексеевич
2. Болотник
Фантастика:
попаданцы
альтернативная история
6.25
рейтинг книги
Болотник 2

Ты всё ещё моя

Тодорова Елена
4. Под запретом
Любовные романы:
современные любовные романы
7.00
рейтинг книги
Ты всё ещё моя

S-T-I-K-S. Пройти через туман

Елисеев Алексей Станиславович
Вселенная S-T-I-K-S
Фантастика:
боевая фантастика
7.00
рейтинг книги
S-T-I-K-S. Пройти через туман

Имя нам Легион. Том 4

Дорничев Дмитрий
4. Меж двух миров
Фантастика:
боевая фантастика
рпг
аниме
5.00
рейтинг книги
Имя нам Легион. Том 4

Сводный гад

Рам Янка
2. Самбисты
Любовные романы:
современные любовные романы
эро литература
5.00
рейтинг книги
Сводный гад

Я князь. Книга XVIII

Дрейк Сириус
18. Дорогой барон!
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Я князь. Книга XVIII

Королевская Академия Магии. Неестественный Отбор

Самсонова Наталья
Любовные романы:
любовно-фантастические романы
8.22
рейтинг книги
Королевская Академия Магии. Неестественный Отбор

Последняя Арена 6

Греков Сергей
6. Последняя Арена
Фантастика:
рпг
постапокалипсис
5.00
рейтинг книги
Последняя Арена 6

Жребий некроманта. Надежда рода

Решетов Евгений Валерьевич
1. Жребий некроманта
Фантастика:
фэнтези
попаданцы
6.50
рейтинг книги
Жребий некроманта. Надежда рода