4

SiteMapPath を使用して、自分のサイトに動的なサイト マップを作成しようとしています。

次のようにする必要があります。

Home > Products > %product_name% > Prices

where%product_name%は、ユーザーの選択に応じて、実行時に動的に設定されます。

このテーマに関する多くの記事を読み、これを選択しましたhttp://harriyott.com/2007/03/adding-dynamic-nodes-to-aspnet-site.aspx . web.sitemapXML ファイルを動的に変更します。問題は、サイトマップを最初に 1 回だけ作成し、それを各ページで使用することです。

読み込まれたページごとに再構築するにはどうすればよいですか?

4

2 に答える 2

7

これを試して:

プロジェクトを右クリックして [新しい項目を追加] を選択し、[サイト マップ] を選択すると、次のような XML 構造になります。

<?xml version="1.0" encoding="utf-8" ?>

     <siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >

       <siteMapNode url="~/Default.aspx" title="Home " description="">

         <siteMapNode url="~/the page URL" title="Products"  description="" >

             <siteMapNode url="~/the page URL" title=" %product_name%"  description="" >

                 <siteMapNode url="~/the page URL" title="Prices"  description="" />

             </siteMapNode >

         </siteMapNode >

       </siteMapNode >

     <sitemap>

** 各ノードの説明の追加はオプションです。

次に、必要な場所に配置する必要があるため、このコードをページの HTML 側に追加します。

<asp:SiteMapPath ID="SiteMapPath1" runat="server">

<CurrentNodeStyle CssClass="Some class" />

   <PathSeparatorTemplate>

      <img runat="server" alt="" src="an image to separate between nodes" height="5" width="5" />

   </PathSeparatorTemplate>

</asp:SiteMapPath>

もちろん、製品用と価格用の 2 つのページがあります。

SiteMap の一部のノードに Tile を動的に割り当てる。価格ページに次のコードを追加します。

1) ページ読み込み時:

SiteMap.SiteMapResolve += new SiteMapResolveEventHandler(SiteMap_SiteMapResolve);

2) この機能を同じページ (価格ページ) に追加します。

 SiteMapNode SiteMap_SiteMapResolve(object sender, SiteMapResolveEventArgs e)
{
    SiteMapNode currentNode = SiteMap.CurrentNode.Clone(true);
    SiteMapNode tempNode = currentNode;

    tempNode.ParentNode.Title = "Change the Product name";
    tempNode.ParentNode.Url = "Change the Product url";

    return currentNode;
}

ご覧のとおり、親ノードを必要に応じて操作し、タイトルや URL などを変更できます。URL も変更する必要があると思います。例: "product.aspx?ID=blah"

于 2010-09-21T06:24:09.583 に答える
1

すごい!誰かがvbで同じことを望んでいる場合、コードは次のとおりです。

    Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load
    AddHandler SiteMap.SiteMapResolve, AddressOf Me.SiteMap_SiteMapResolve

End Sub

Private Function SiteMap_SiteMapResolve(sender As Object, e As SiteMapResolveEventArgs) As SiteMapNode
    Dim currentNode As SiteMapNode = SiteMap.CurrentNode.Clone(True)
    Dim tempNode As SiteMapNode = currentNode

    tempNode.ParentNode.Title = "Change the Product name"
    tempNode.ParentNode.Url = "Change the Product url"

    Return currentNode
End Function
于 2012-05-12T16:43:19.497 に答える