Добавим на сайт категории товаров: электромобили и автомобили с двигателем внутреннего сгорания. При переходе на соответствующие страницы будут отображаться только автомобили выбранной категории.
Изменение контроллера
Функция в CarsController будет принимать параметр — строку, соответствующую типу автомобиля (электромобиль или бензиновый), извлекаемую из URL-адреса.
Функция принимает параметр типа string, названный category. Этот параметр соответствует третьему сегменту URL-адреса (например, /cars/electro). Создаём переменную cars типа List<Car> (модель Car подключена) для хранения отображаемых автомобилей и пустую переменную carCategory типа string.
Проверяем, является ли category пустой строкой. Если да, отображаются все автомобили (string.IsNullOrEmpty(category)). В противном случае, выполняем дополнительные проверки:
- Если category (без учёта регистра) равно «электро», выбираем только электромобили с помощью LINQ-запроса: allCars.Where(c => c.Category == "Электромобили").
- Если category (без учёта регистра) равно «бензин» или «fuel», выбираем автомобили с бензиновым двигателем: allCars.Where(c => c.Category == "Классические автомобили").
Отсортированный по ID список автомобилей (allCars.OrderBy(c => c.Id)) присваиваем переменной cars. Создаём объект CarViewModel, устанавливаем в него значения cars и carCategory, и передаём его в представление.
Изменение представления
В представлении (Cars/List.cshtml) корректируем отображение заголовка страницы в зависимости от carCategory. Заголовок генерируется динамически.
Настройка маршрутов
В Startup.cs закомментируем app.UseMvcWithDefaultRoute(). Явно настроим маршруты с помощью app.UseMvc(routes => …):
- Маршрут по умолчанию для главной страницы (/): routes.MapRoute("default", "", new { controller = "Home", action = "Index" });
- Маршрут для отображения автомобилей: routes.MapRoute("cars", "cars/{action}/{category?}", new { controller = "Cars", action = "List" }); {category?} — необязательный параметр категории.
- Имя параметра category в маршруте должно совпадать с именем параметра в контроллере.
Дополнительные изменения
Добавлены ссылки на категории «Электромобили» и «Бензиновые автомобили» в Layout.cshtml и заменены заголовки страниц и ссылки.
Веб-сайт теперь корректно отображает категории товаров. Ссылки /cars/electro и /cars/fuel отображают электромобили и автомобили с бензиновым двигателем соответственно. Добавление товаров в корзину — в следующем уроке.