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

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

Жанры

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

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

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

Дроздов Анатолий Федорович
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
рейтинг книги
Прогрессор поневоле