ASP.NET Core MVC: Фильтрация товаров по категориям

Добавим на сайт категории товаров: электромобили и автомобили с двигателем внутреннего сгорания. При переходе на соответствующие страницы будут отображаться только автомобили выбранной категории.

Изменение контроллера

Функция в 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 => …):

  1. Маршрут по умолчанию для главной страницы (/): routes.MapRoute("default", "", new { controller = "Home", action = "Index" });
  2. Маршрут для отображения автомобилей: routes.MapRoute("cars", "cars/{action}/{category?}", new { controller = "Cars", action = "List" }); {category?} — необязательный параметр категории.
  3. Имя параметра category в маршруте должно совпадать с именем параметра в контроллере.

Дополнительные изменения

Добавлены ссылки на категории «Электромобили» и «Бензиновые автомобили» в Layout.cshtml и заменены заголовки страниц и ссылки.

Веб-сайт теперь корректно отображает категории товаров. Ссылки /cars/electro и /cars/fuel отображают электромобили и автомобили с бензиновым двигателем соответственно. Добавление товаров в корзину — в следующем уроке.

Что будем искать? Например,программа