0

現在、SiteMapPath を使用して ASP.net 3.5 (vb.net) ページのブレッドクラムを生成していますが、うまく機能します。

今、同じコントロールを使用して動的なページ タイトル (タグ内) を作成する方法を見つけようとしています。逆のパスをリストしたいのですが、SiteMapPath コントロールにはリンクと一連のスタイリング スパンが含まれています。そのすべてを削除して、区切り記号付きの単純なパスを取得する方法はありますか?

たとえば、サイトの「About」セクション内の「Press Releases」ページにいるとします。

ブレッドクラムは次のように表示されます。

ホーム > 会社概要 > プレスリリース

ページタイトルを次のようにしたい:

プレスリリース - 会社概要 - 会社名

したがって、順序を逆にして、すべてのスパン、リンク、およびスタイリングをドロップし (これはタグ内にあるため)、ルート ノード「ホーム」をドロップして、最後に会社名を追加する必要があります。私のメニュー ナビゲーションとブレッドラムはすべてサイトマップ ファイルから駆動されるので、タイトルも同じようにするのが理にかなっていると思いました。

何かご意見は?ありがとう。

4

1 に答える 1

1

目的の出力を実現する最良の方法は、SitePathコントロールを無視し、代わりにSiteMapのSiteMapNodeのコレクションを使用することです。サーバーはweb.sitemapをSiteMapNodeのコレクションに解析し、現在のページのURLに一致するノードを見つけることによってSiteMap.CurrentNodeを接続します。各SiteMapNodeにはParentNodeプロパティがあります。これがMSDNのリファレンスページです。

したがって、必要なのは、CurrentNodeに親があるかどうかを確認することだけです。親がある場合は、ParentNodeのタイトルをCurrentNodeのタイトルに追加し、RootNode(ルートノードのタイトルの代わりに会社名を使用)に到達するまで続行します。

以下は簡単な解決策です。マスターページを使用している場合は、マスターページに表示される可能性があります。あなたの言語はわかりませんが、VB.Netで簡単に書き直すことができます。私はそれに簡単なテストをしました、そしてそれはうまくいったようでした。ページタイトルを区切る文字をカスタマイズできます。

protected void Page_Load(object sender, EventArgs e)
{
    Page.Title = SiteMapTitle(SiteMap.CurrentNode, "", " - ");
}

private string GetNodeTitle(SiteMapNode oNode)
{
    if (oNode == SiteMap.RootNode)
        return "Company Name";
    else
        return oNode.Title;
}

private string SiteMapTitle(SiteMapNode oNode, string szTitle, string szItemSeparator)
{
    if (szTitle != string.Empty)
        szTitle = szTitle + szItemSeparator + GetNodeTitle(oNode);
    else
        szTitle = GetNodeTitle(oNode);

    if (oNode.ParentNode != null)
        szTitle = SiteMapTitle(oNode.ParentNode, szTitle, szItemSeparator);

    return szTitle;
}

お役に立てば幸いです...

于 2011-02-18T19:42:35.107 に答える