2011-02-18 29 views
0

我目前使用SiteMapPath來爲我的ASP.net 3.5(vb.net)頁面生成一個麪包屑,它效果很好。使用SiteMapPath創建動態頁面標題?

現在我想弄清楚如何能夠使用相同的控件來建立一個動態頁面標題(在標籤中)。我想列出一個反向路徑,但SiteMapPath控件包含鏈接和一堆樣式跨度。有什麼辦法可以刪除所有這些,只需使用分隔符得到一個簡單的路徑?

例如,假設我們在我網站「關於」部分的「新聞稿」頁面上。

的痕跡顯示爲:

首頁>>新聞稿

我想有頁面標題是:

新聞稿 - 關於 - 公司名稱

所以我需要它來反轉訂單,刪除所有跨度,鏈接和樣式(因爲它位於標籤內)並放下根節點「Home」,然後將公司名稱添加到最後。由於我的菜單nav和breadrumbs都是從站點地圖文件驅動的,所以我認爲嘗試使標題保持不變是有道理的。

有什麼想法?謝謝。

+0

難道我的回答幫助解決問題了嗎? – PhillFox 2011-02-25 15:46:57

回答

1

實現所需輸出的最佳方法是忽略SitePath控件,而是使用SiteMap的SiteMapNode集合。服務器將web.sitemap解析爲SiteMapNodes的集合,並通過查找與當前頁面的URL匹配的節點來連接SiteMap.CurrentNode。每個SiteMapNode都有一個ParentNode屬性。 Here is the reference page on MSDN

所以,你需要做的是檢查CurrentNode有父,如果它您添加ParentNode的標題爲CurrentNode的標題,並保持下去,直到你到達根節點(你的根替換爲您的公司名稱節點的標題)。

下面是一個快速解決方案;如果你使用的話,它可以進入MasterPage。我不確定你的語言,但這應該很容易在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; 
} 

希望幫助...