如何使用高效的Route和ASP.NET Sitemap对此导航方案进行建模?

时间:2010-01-07 16:36:33

标签: asp.net-mvc sitemapprovider mvcsitemapprovider

我需要对以下场景进行建模,但我无法使用MvcSitemapProvider(我认为我的问题也直接映射到默认的SiteMapProvider)。我希望获得默认的breadcrumbs控件,以便与我的动态数据一起正常工作。

我有一个products列表,按category分组,其中parent-category

  
      
  • ParentCategory
  •   
    •   
    • 类别
    •   
  •   
    •   
      •   
      • 产品
      •   
    •   
  •   

我希望能够使用以下网址:

  

(1) /产品
  (2) / Products / MainCategory
  (3) / Products / MainCategory / Category
  (4) / Products / MainCategory / Category / Product

显然我的解决方案不是最佳的。

站点地图中的Products节点没有ChildNodes,因此它们不会显示在我的菜单中。

我创建了一个中间对象,它添加了主要类别和类别,以便它们显示在我的菜单中。但这不会解决问题,因为其他控件(面包屑)只是说我在/ Products。

我应该更改路线还是更改我的站点地图定义?或者别的什么?


我目前有以下内容:

  • 2条路线
    1 for / Products,/ Products / MainCategory和/ Products / MainCategory / Category - >映射到ProductsController.Index()
    1 for / Products / MainCategory / Category / Product - >映射到ProductsController.Product()
  • 站点地图中的1个条目
    定义了dynamicParameters(MainCategory; Category)

Global.asax路线定义:

    routes.MapRoute( _
        "Product", _
        "Products/{MainCategoryName}/{CategoryName}/{ProductName}", _
        New With {.controller = "Products", .action = "Product"} _
    )

    routes.MapRoute( _
        "Products", _
        "Products/{MainCategoryName}/{CategoryName}", _
        New With {.controller = "Products", .action = "Index", .GroupName = "", .CategoryName = ""} _
    )

我的站点地图中有以下条目:

<?xml version="1.0" encoding="utf-8" ?>
<siteMap>
  <mvcSiteMapNode controller="Home" action="Index" title="Home" description="Homepage">
    <mvcSiteMapNode controller="Products" action="Index" title="Products" description="" isDynamic="true" dynamicParameters="MainCategoryName;CategoryName" />
  </mvcSiteMapNode>
</siteMap>

1 个答案:

答案 0 :(得分:2)

我目前正在使用自定义SiteMapProvider。我还在维护与他们无关的自定义路线。