9

http://mvcsitemap.codeplex.com/の MvcSiteMapProvider を使用して、プロジェクトのパンくずリストを作成しています。適切なユーザーの情報を表示するために ID を渡す必要がある URL がいくつかあります。例: http: //localhost:52306/Home/User?ID=101101

さらにサイトマップ (http://localhost:52306/Home/User/Details?ID=101101 など) に移動し、ブレッドクラム リンクを使用して「ユーザー」ページに戻ろうとすると、ID パラメータが失われます。 . アクション メソッドに SiteMapPreserveRouteData 属性を追加しようとしましたが、何もしていないようです。この ID 情報が保持されていることを確認する簡単な方法はありますか? SiteMapPreserveRouteDataAttribute がこれを行うはずだと思ったので、属性に何か問題がありますか? 私の方法は次のようになります。

[SiteMapPreserveRouteData]
public ActionResult User()
{
  //code
}

さらに情報が必要な場合はお知らせください。

4

2 に答える 2

1

私のやり方では、ブレッドクラムをレンダリングするために元のmvcサイトマップヘルパーソースを取得し、パラメーターを処理するように変更しました(ただし、私のプロジェクトでは、フィルター処理用のパラメーターのみを表示し、ユーザーがそれらをクリックして他のフィルター処理パラメーターを失うことができます。ノードテキストの非常に素朴な実装、それを行う方法の単なる例):

   private static string SiteMapText(this MvcSiteMapHtmlHelper helper, SiteMapNode node, string linkCssClass, IDictionary<string, object> htmlAttributes)
    {
        var extraAttributes = new StringBuilder();
        foreach (var attribute in htmlAttributes)
        {
            extraAttributes.Append(" " + attribute.Key + "=\"" + attribute.Value + "\"");
        }            

        string spanHtml;
        var paramDictionary = helper.HtmlHelper.ViewContext.RequestContext.HttpContext.Request.Params.ToDictionary();
        var queryParams = paramDictionary.Select(x => string.Format("{0}:{1}", x.Key, x.Value));

        // here you add request parameters
        var title = helper.HtmlHelper.Encode(string.Format("{0} ({1})", node.Title, string.Join(";", queryParams)));

        if (!string.IsNullOrEmpty(linkCssClass))
        {
            spanHtml = string.Format("<span><span class=\"{0}\"{1}>{2}</span>", linkCssClass, extraAttributes, title);
        }
        else
        {
            spanHtml = string.Format("<span><span{1}>{0}</span>", title, extraAttributes);
        }

        return spanHtml;
    }

同様に、SiteMapLinkメソッドを調整して、現在のノードのリクエストパラメーターを含めることができます。

于 2012-01-17T07:23:56.650 に答える
0

MVCSiteMapperProvider のこのスレッドによると、クエリ文字列は使用できません。クエリ文字列を無視し、ルート データのみを使用します。

クエリ文字列と MVCSiteMapper

クエリ文字列を使用する代わりに、いくつかの新しいルートを作成することを考えましたか?

于 2011-12-29T14:03:19.733 に答える