1

MVC プロジェクトがあり、MVCSiteMapProvider を使用してブレッドクラムを実装しています。

私の MVC.sitemap は次のとおりです。

<mvcSiteMapNode title="Index" controller="Index" action="Index" key="Index">
    <mvcSiteMapNode title="Parent" controller="Parent" action="View" key="Parent" >
      <mvcSiteMapNode title="Child" controller="Child" action="View" />
    </mvcSiteMapNode>
</mvcSiteMapNode>

_layout ビューに追加しました

@Html.MvcSiteMap().SiteMapPath()

親アイテムに戻ったときに正しいアイテムを取得するには、パラメーターを保持する必要があります。これを行うために、View アクションに注釈 SiteMapPreserveRouteData を追加しました。

[SiteMapPreserveRouteData]
public ActionResult View(Guid id)

これで、ブレッドクラムを使用して移動できます。

問題は、最初のアイテムでしか機能しないことです。項目を変更するとパンくずリストが消える…

サンプル: 親 p2 -> 子 c1 に移動し、インデックスに戻って親 p1 を選択すると、親のビュー ページにブレッドクラムが表示されません。

注釈 SiteMapPreserveRouteData を削除しても発生しませんが、ブレッドクラムは ID を失いました..

私は何をしているのですか?アイデア?

ありがとう

4

1 に答える 1

1

問題はおそらくあなたのアプローチです。SiteMapPreserveRouteData を使用することはまったくお勧めしません。これは総当たりであり、さらに重要なことに、その設計で採用されたアプローチには欠陥があります。

サイトマップでユーザーの位置を追跡する方法について詳しく説明した投稿を作成しました - MvcSiteMapProvider にユーザーの位置を記憶させる方法。その投稿の情報を理解することは、消えないパンくずリストを作成するための鍵です。

于 2013-08-04T06:25:05.307 に答える