2011-10-04 53 views
1

我开发一个电子商务应用程序,使用ASP.net MVC 3ASP.Net MVC路线 - 电子商务类别(根和子类别)

遇到了一些麻烦搞清楚映射“类别”

的最佳方式

对于每个类别,我有一个根页面 - 这将显示一些报价,信息等。 (这些例子)

  • /书籍
  • /衣服
  • /电子

目前,我有一个图书控制器和运动控制器,每一个电子控制器 指数返回相应的视图...

这似乎有点“笨拙”,仿佛一个新的类别被添加,我们必须为它创建一个控制器。

在产品数据库中,我在分层结构中具有“展开”类别。 所以,一本书上计算可能有:

  • /书籍/
  • /书籍/非小说类/
  • /书籍/非小说类/计算

我也有一个“搜索”控制器 此处理产品搜索(搜索/?q =某些查询) 此外,可以执行搜索/?q = * & category =/books/non-fiction/computing - 非虚构/计算列为一个类别。

所以...我想我想要做的是路由“根”类别显示该类别的默认视图。 如果之后有什么,应该被视为类别搜索...

有没有办法做到这一点?

回答

1

我认为最好的解决方案就是在产品控制器的索引操作采用可选参数。如果参数为空或为空,那么只需返回要显示的默认产品列表,否则,根据字符串中提供的类别过滤产品。

因此,例如,这将是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 } 
    ); 
+0

感谢 - 这仍然意味着我需要创建每个类别的路线..?例如,如果我们添加了“玩具”类别,则必须相应地修改我的global.asax? – Alex

+0

是的,但您也可以将所有多个参数传递给您的路线,以便您可以在一个路线中传递{category}和{type}。只要您的操作相应地进行过滤,您不应为每个产品创建新路线(如果您不想)。 –