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

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

Жанры

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

Представление Index

При наличии частичного представления

_CarListPartial
представление
Index
будет небольшим. Создайте в каталоге
Views\Cars
новый файл представления по имени
Index.cshtml
. Удалите весь сгенерированный код и добавьте следующую разметку:

@model IEnumerable<Car>

@{

ViewData["Title"] = "Index";

}

<h1>Vehicle Inventory</h1>

<partial name="Partials/_CarListPartial" model="@Model"/>

Частичное

представление
_CarListPartial
вызывается со значением модели содержащего представления (
IEnumerable<Car>
), которое передается с помощью атрибута
model
. В итоге модель частичного представления устанавливается в объект, переданный вспомогательной функции дескриптора
<partial>
.

Чтобы взглянуть на представление

Index
, модифицируйте метод
Index
класса
CarsController
, как показано ниже:

[Route("/[controller]")]

[Route("/[controller]/[action]")]

public IActionResult Index

=> View(_repo.GetAllIgnoreQueryFilters);

Запустив приложение и перейдя по ссылке

https://localhost:5001/Cars/Index
, вы увидите список автомобилей (рис. 31.4).

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

Представление ВуMake

Представление

ВуMake
похоже на
Index
, но настраивает частичное представление так, что информация о производителе отображается только в заголовке страницы. Создайте в каталоге
Views\Cars
новый файл представления по имени
ВуMake.cshtml
. Удалите весь сгенерированный код и добавьте следующую разметку:

@model IEnumerable<Car>

@{

ViewData["Title"] = "Index";

}

<h1>Vehicle Inventory for @ViewBag.MakeName</h1>

@{

var mode = new ViewDataDictionary(ViewData) {{"ByMake", true}};

}

<partial name="Partials/_CarListPartial" model="Model" view-data="@mode"/>

Отличия заметить легко. Здесь создается экземпляр

ViewDataDictionary
, содержащий свойство
ByMake
из
ViewBag
, который затем вместе с моделью передается частичному представлению, что позволяет скрыть информацию о производителе. Метод действия для этого представления должен получить все автомобили с указанным значением
MakeId
и установить
ViewBag
в
MakeName
с целью отображения в пользовательском интерфейсе. Оба значения берутся из маршрута. Добавьте в класс
CarsController
новый метод действия по имени
ByMake
:

[HttpGet("/[controller]/[action]/{makeId}/{makeName}")]

public IActionResult ByMake(int makeId, string makeName)

{

ViewBag.MakeName = makeName;

return View(_repo.GetAllBy(makeId));

}

Запустив приложение и перейдя по ссылке

https://localhost:5001/Cars/l/VW
, вы увидите список, показанный на рис. 31.5.

Представление Details

Создайте в каталоге

Views\Cars
новый файл представления по имени
Details.cshtml
. Удалите весь сгенерированный код и добавьте следующую разметку:

@model Car

@{

ViewData["Title"] = "Details";

}

<h1>Details for @Model.PetName</h1>

@Html.DisplayForModel

<div>

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

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

<item-list></item-list>

</div>

Вспомогательная функция

@Html.DisplayForModel
использует созданный ранее шаблон отображения (
Car.cshtml
) для вывода детальной информации об автомобиле.

Прежде чем обновлять метод действия

Details
, добавьте вспомогательный метод по имени
GetOne
, который будет извлекать одиночную запись
Car
:

internal Car GetOneCar(int? id) => !id.HasValue ? null : _repo.Find(id.Value);

Модифицируйте метод действия

Details
следующим образом:

[HttpGet("{id?}")]

public IActionResult Details(int? id)

{

if (!id.HasValue)

{

return BadRequest;

}

var car = GetOneCar(id);

if (car == null)

{

return NotFound;

}

return View(car);

}

Маршрут для метода действия

Details
содержит необязательный параметр маршрута
id
с идентификатором автомобиля, значение которого присваивается параметру
id
метода. Обратите внимание, что у параметра маршрута есть вопросительный знак с маркером. Это указывает на необязательность параметра, почти как вопросительный знак в типе
int?
делает переменную
int
допускающей значение
null
. Если параметр не был предоставлен или оболочка службы не может отыскать автомобиль с идентификатором, заданным в параметре маршрута, тогда метод возвращает ошибку
NotFound
. В противном случае метод отправляет найденную запись
Car
представлению
Details
. Запустив приложение и перейдя по ссылке
https://localhost:5001/Cars/Details/1
, вы увидите экран, показанный на рис. 31.6.

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

Светлая ведьма для Темного ректора

Дари Адриана
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Светлая ведьма для Темного ректора

Дайте поспать! Том II

Матисов Павел
2. Вечный Сон
Фантастика:
фэнтези
постапокалипсис
рпг
5.00
рейтинг книги
Дайте поспать! Том II

Последний попаданец 12: финал часть 2

Зубов Константин
12. Последний попаданец
Фантастика:
фэнтези
юмористическое фэнтези
рпг
5.00
рейтинг книги
Последний попаданец 12: финал часть 2

Решала

Иванов Дмитрий
10. Девяностые
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Решала

Истребители. Трилогия

Поселягин Владимир Геннадьевич
Фантастика:
альтернативная история
7.30
рейтинг книги
Истребители. Трилогия

Попаданка для Дракона, или Жена любой ценой

Герр Ольга
Любовные романы:
любовно-фантастические романы
7.17
рейтинг книги
Попаданка для Дракона, или Жена любой ценой

Беглец. Второй пояс

Игнатов Михаил Павлович
8. Путь
Фантастика:
фэнтези
героическая фантастика
боевая фантастика
5.67
рейтинг книги
Беглец. Второй пояс

Черный Маг Императора 4

Герда Александр
4. Черный маг императора
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Черный Маг Императора 4

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

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

Волк: лихие 90-е

Киров Никита
1. Волков
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Волк: лихие 90-е

Рота Его Величества

Дроздов Анатолий Федорович
Новые герои
Фантастика:
боевая фантастика
8.55
рейтинг книги
Рота Его Величества

На изломе чувств

Юнина Наталья
Любовные романы:
современные любовные романы
6.83
рейтинг книги
На изломе чувств

Дракон

Бубела Олег Николаевич
5. Совсем не герой
Фантастика:
фэнтези
попаданцы
9.31
рейтинг книги
Дракон

Кодекс Крови. Книга IV

Борзых М.
4. РОС: Кодекс Крови
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Крови. Книга IV