0

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

「Mvc.sitemap」を使用しています

       <mvcSiteMapNode title="Reports" controller="Report" action="Index" preservedRouteParameters="ClientId" route="Report">
          <mvcSiteMapNode key="Report_Section" title="Sections" controller="Section" action="FilterByReport" preservedRouteParameters="ClientId,ReportId" route="Report_Section">
            <mvcSiteMapNode key="Background" title="Background" controller="Wizard" action="Index" preservedRouteParameters="ClientId,ReportID,SectionID,SectionName" route="Background"/>

"Global.asax" カスタム ルートは次のようになります。

        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 });
        routes.MapRoute("Background", "Report/{ReportID}/SectionID/{SectionID}/SectionName/{SectionName}", new { controller = "Wizard", action = "Index", ReportID = UrlParameter.Optional, SectionID = UrlParameter.Optional, SectionName = UrlParameter.Optional });

「Report」および「Report_Section」ルートは正常に機能します。ただし、「Background」ルートに入ると、mvcSiteMap BreadCrumb URL の「Report_Section」および「Report」ルートのすべてのルート構造が失われます。代わりに、GUID を取得します。

http://localhost/7ebe9bb9-a663-43fd-9fb1-865866be12b9

これは、自動生成された XML ノード キーである可能性があります。ただし、クリックすると 404 が発生します。

次のようなものを取得する必要があります。

レポート

http://localhost/Report/10

セクション

http://localhost/Report/10/Section/100

これを引き起こしている可能性のあるアイデアはありますか?

ありがとう。

4

1 に答える 1

1

URL リゾルバーが一致を見つけられない場合、URL の Guid を取得します。この場合に例外をスローすると、他の問題が発生していました ( URL リゾルバーが例外をスローする理由を参照してください)。

ただし、構成を詳しく確認しないと、一致しない理由を正確に伝えることはできません。手がかりは、UrlHelper.RouteUrl(string, RouteValueDictionary) を使用して URL を解決していることです。ルート値とルート名で明示的に呼び出すことができます。また、他の手がかりについてはソース コードを参照してください。

見た目が悪いことに気付いたのは、バックグラウンドの ClientID ルートパラメーターがそのルートで使用されていない場合でも保持していることです。ルート パラメーターを保存しても、現在の HTTP 要求からそれらをコピーするだけであり、他のノードはそれらを忘れているように見えることに注意してください。

PreserveRouteParameters は通常、データ編集ページを作成する CRUD 操作に使用されます。ユーザーのナビゲーション パスを「覚えている」ように見せたい場合は、一意のルート値の組み合わせごとに 1 つのノードをサイトマップに追加する必要があります。

上記で問題が解決しない場合は、問題を示す小さなデモ プロジェクトを作成し、それを GitHub にアップロードするか、圧縮してダウンロードできるようにしてから、デモへのリンクを使用して GitHubで新しい問題を開いてください。

于 2013-08-17T23:00:40.113 に答える