1

website.sitemap ファイルには次のものがありました

  <siteMapNode url="~/admin/NewSub.aspx" title="New Subs" >
    <siteMapNode url="~/admin/Request.aspx" title="Request Details"  queryStringToInclude="rid">
      <siteMapNode url="~/admin/Preview.aspx" title="Preview"   queryStringToInclude="rid"/>
      <siteMapNode url="~/admin/EditRequest.aspx" title="Edit Request"  queryStringToInclude="rid"/>
    </siteMapNode>
  </siteMapNode>
  <siteMapNode url="~/admin/Notices.aspx" title="Notices">
    <siteMapNode url="~/admin/RequestDetails.aspx" title="Request Details"  queryStringToInclude="rid">
    </siteMapNode>
  </siteMapNode>

同じページにアクセスするには 2 つの方法があるため、RequestDetail.aspx を 2 回含める必要がありますが、これを行うと重複エラーが発生し、異なるノードで同じ URL を持つことはできません。そこで、2 つ目を url="~/admin/RequestDetails.aspx?id=1" および queryStringToInclude="id,rid" に更新しました

サイトマップの値にクエリ文字列を追加する必要があるため、CustomProvider を使用しています。SmartSiteMapProvider_SiteMapResolve メソッドでコードがどれを選択するかを知るようにする方法はありますか? 当初は次のものがありました。

SiteMapNode temp = null; temp = SiteMap.Providers["SiteMap"].CurrentNode.Clone(true);

しかし、それは常に「新しいサブ」が現在のノードになるため、次のチェックを含めるようにコードを更新しました。

        if (HttpContext.Current.Request.QueryString["id"] != null)
        {
            temp = SiteMap.Providers["SiteMap"].FindSiteMapNodeFromKey("/testapp/admin/requestdetails.aspx?id=1").Clone(true);
        }

それはうまくいくようですが、その特定のURLのチェックをハードコーディングしています.これを行うより良い方法はありますか?

4

0 に答える 0