/ / mvc.SiteMapのXMLノードをglobal.asaのルートにバインドできませんか。 - asp.net-mvc、mvcsitemapprovider、mvcsitemap、asp.net-mvc-sitemap

mvc.SiteMapのXMLノードをglobal.asaのルートにバインドする際に問題がありますか? - asp.net-mvc、mvcsitemapprovider、mvcsitemap、asp.net-mvc-sitemap

MVC3、C#4、Razor、MvcSiteMapProvider V4を使用しています。

私のmvc.sitemapファイル内のMvcSiteMapNodeを、global.asa内の自分の経路に明示的にバインドしようとしています。しかし、うまくいかないようです。間違いなく私は何かを省略しました。

global.asaで私のルート:

  routes.MapRoute("Report", "Report/{ClientId}", new { controller = "Report", action = "Index", ClientId = UrlParameter.Optional });
routes.MapRoute("Report_Section", "Report/{ClientId}/Section/{ReportId}", new { controller = "Section", action = "FilterByReport", ReportId = UrlParameter.Optional });

私のmvc.sitemapの一部:

        <mvcSiteMapNode title="Reports" controller="Report" action="Index" preservedRouteParameters="ClientId" route="Report">
<mvcSiteMapNode title="Sections" route="Report_Section">

だから私の2つのURLは次のとおりです。

レポートルート:

Report/10

Reports_Sectionsルート:

Report/10/Section/100

私は2番目に認識を得ていませんしたがって、ブレッドクラムトレイルは関連ページに表示されません。私はただmvc.sitemapで "route"属性を指定することによって願っていました、mvcSiteMapProviderは2つを結合するでしょう。

考えます。どこが間違っていますか?

どうもありがとう

編集:

私は "mvc.sitemap"と "route"で "controller"と "action"を指定する必要がないようです。

         <mvcSiteMapNode title="Sections" controller="Section" action="FilterByReport"  route="Report_Section" preservedRouteParameters="ClientId,ReportId">

回答:

回答№1は1

routeパラメータはマッチをに絞り込むためのものですすべてのルートを一致させるのではなく、特定のルートを指定します。ただし、ルートを指定するだけでは、一致させるのに十分ではありません。また、あなたの行動、コントローラー、(オプションの)エリア、そして(オプションの)アクションパラメーターを提供する必要があります。

また、あなたのことを覚えているように見せるためにブレッドクラムトレイルでは、サイトマップにClientID / ReportIDの組み合わせごとにノードを追加する必要があります。これは、いくつか使用することでかなり簡単に実現できます。 DynamicNodeProviders あなたのデータベース/データソースからあなたのデータをロードするため。全体的な原則は、マップ内の一意の場所の照合に基づいており、各照合を一意にするにはこれらのIDが必要です。

PreservedRouteParametersは通常、任意のIDをCRUD操作のアクションメソッドパラメータと一致させる。これにより、サイトマップにIDを登録せずに、追加/編集/削除ページを任意のIDに一致させることができます。