ASP.Net MVC路线 - 电子商务类别(根和子类别)

时间:2011-10-04 16:00:59

标签: asp.net-mvc routing url-routing custom-routes

我正在使用ASP.net MVC 3开发电子商务应用程序

找出映射“类别”的最佳方法时遇到一些麻烦

对于每个类别,我都有一个根页面 - 它会显示一些优惠,信息等。 (这些都是例子)

  • / books
  • / clothes
  • /电子

目前,我有一个书籍控制器,一个运动控制器和一个电子控制器 每个索引返回适当的视图......

这似乎有点“笨拙”,好像添加了一个新类别,我们必须为它创建一个控制器..

在产品数据库中,我在层次结构中有“扁平化”类别。 所以,一本关于计算的书可能有:

  • / books /
  • / books / non-fiction /
  • / books / non-fiction / computing

我也有一个“搜索”控制器 这处理产品搜索(搜索/?q =某些查询) 此外,可以搜索/?q = *& category = / books / non-fiction / computing - 这将显示所有带有/ books / non-fiction / computing的产品作为类别列出。

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

有没有办法做到这一点?

1 个答案:

答案 0 :(得分:1)

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

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