ASP.Net MVC Routes - категории электронной коммерции (корневая и подкатегории) - PullRequest
1 голос
/ 04 октября 2011

Я занимаюсь разработкой приложения для электронной коммерции, используя ASP.net MVC 3

Возникли проблемы с поиском лучшего способа сопоставления "категорий"

Для каждой категории у меня есть корневая страница, на которой отображаются некоторые предложения, информация и т. Д. (это примеры)

  • / books
  • / одежда
  • / электроника

В настоящее время у меня есть контроллер книг, спортивный контроллер и контроллер электроники. Индекс каждого возвращает соответствующий вид ...

Это выглядит немного "неуклюже", как будто добавлена ​​новая категория, для этого мы должны создать контроллер ..

В базе данных продуктов у меня есть категории "сплющенные" в иерархии. Итак, книга по вычислительной технике может иметь:

  • / books /
  • / книги / не художественная литература /
  • / Книги / Нехудожественная литература / Компьютеры

У меня также есть контроллер поиска Это обрабатывает поиск товаров (search /? Q = некоторый запрос) Кроме того, можно выполнить поиск /? Q = * & category = / books / nonfiction / computing - здесь будут показаны все продукты, для которых в качестве категории указаны / books / nonfiction / computing.

Итак ... я думаю, что я пытаюсь сделать ... это маршрутизировать категорию "root", чтобы показать представление по умолчанию для этой категории. Если после этого что-то есть, следует рассматривать поиск категории ...

Есть ли способ сделать это?

1 Ответ

1 голос
/ 04 октября 2011

Я думаю, что лучшим решением было бы просто иметь контроллер продукта, где действие индекса принимает необязательный параметр.Если параметр пуст или равен нулю, просто верните список продуктов по умолчанию, который вы хотите отобразить, в противном случае отфильтруйте продукты по категории, указанной в строке.

Так, например, это будетURL-адреса:

/products/books 
/products/clothes 
/products/electronics
/products/whatever

Или вы можете просто добавить маршруты для каждой категории, если вам не нравится сформированный URL-адрес, чтобы отправить его на любой контроллер / действие, которое вам нравится.Это честно личное предпочтение и все, что вам больше нравится.

Например:

context.MapRoute(
          "books_route",
          "products/books/{type}",
          new { controller = "product", action = "books", type= UrlParameter.Optional }
      );

or 


   context.MapRoute(
          "books_route",
          "books/{type}",
          new { controller = "product", action = "books", type= UrlParameter.Optional }
      );
...