0

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

mvc.sitemap ファイルの MvcSiteMapNodes を、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」に「controller」と「action」を指定する必要があり、「route」だけでは動作しないようです。

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

1 に答える 1

1

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

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

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

于 2013-08-17T23:18:06.430 に答える