【问题标题】:ASP.Net MVC Routes - eCommerce Categories (root, and sub categories)ASP.Net MVC 路由 - 电子商务类别(根和子类别)
【发布时间】:2011-10-04 16:00:59
【问题描述】:

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

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

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

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

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

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

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

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

我还有一个“搜索”控制器 这处理产品搜索(search/?q=some query) 此外,可以进行 search/?q=*&category=/books/non-fiction/computing - 这将显示 /books/non-fiction/computing 列为一个类别的所有产品。

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

有没有办法做到这一点?

【问题讨论】:

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


    【解决方案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 }
          );
    

    【讨论】:

    • 谢谢 - 这仍然意味着我需要为每个类别创建一个路线..?例如,如果我们添加了“玩具”类别,我必须相应地修改我的 global.asax?
    • 是的,但是您也可以将所有多个参数传递给您的路线,这样您就可以在一条路线中传递 {category} 和 {type}。只要您的操作相应地过滤,如果您不想为每个产品创建新路线,您就不应该这样做。
    猜你喜欢
    • 2020-12-28
    • 2018-08-19
    • 1970-01-01
    • 2013-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-28
    • 1970-01-01
    相关资源
    最近更新 更多