次のシナリオをモデル化する必要がありますが、MvcSitemapProvider で動作させることができません (私の問題は、デフォルトの SiteMapProvider にも直接マップされていると思います)。デフォルトのブレッドクラム コントロールを動的データで適切に動作させたいと考えています。
products
グループ化されたリストがありcategory
ますparent-category
- 親カテゴリ
- カテゴリー
- 製品
次の URL を使用できるようにしたい:
(1) /Products
(2) /Products/MainCategory
(3) /Products/MainCategory/Category
(4) /Products/MainCategory/Category/Product
明らかに、以下の私の解決策は最適ではありません。
サイトマップのProducts
ノードには ChildNodes がないため、メニューに表示されません。
メインカテゴリとカテゴリを追加する中間オブジェクトを作成して、メニューに表示されるようにしました。しかし、他のコントロール (ブレッドクラム) は私が /Products にいると言っているだけなので、これは問題を解決しません。
ルートを変更するか、サイトマップの定義を変更する必要がありますか? それとも何か他のものですか?
私は現在、次のものを持っています:
- 2
/Products、/Products/MainCategory および /Products/MainCategory/Category のルート 1 -> ProductsController.Index() へのマッピング
/Products/MainCategory/Category/Product の 1 -> ProductsController.Product() へのマッピング - dynamicParameters が定義されたサイトマップ内の 1 つのエントリ
(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>