2011-11-30 65 views
0

我有SharePoint站點,我想在代碼中讀取全局導航信息。sharepoint 2010無法在代碼中獲得全局導航節點

在屬性頁:

/_layouts/AreaNavigationSettings.aspx 我補充說: 「位置」, 「組織」, 「98」 的節點。

enter image description here

但是,當我試圖讓那些節點代碼

using (var site = new Microsoft.SharePoint.SPSite(URL)) 
      { 
       using (var currentWeb = site.OpenWeb()) 
       { 
       return currentWeb.Navigation.GlobalNodes; 

      } 

}

我一直在這些節點:

  • 首頁
  • 快速啓動
  • 的SharePoint頂部導航欄

爲什麼我有那些奇怪的節點,如何獲得真正的globan naviigation /?

回答

2

SharePoint的導航是分層的。該層次結構具有三個節點:

  • 首頁 - 表示左上角的單個「主頁」圖標;
  • 快速啓動 - 表示頁面左側的快速啓動菜單;
  • 頂部導航欄 - 代表頁面頂部的導航欄。

你必須深入到這些節點的子節點找到自己的三個節點 - 看到SPNavigationNode.Children屬性。 SharePoint缺少導航節點的唯一標識符,因此您必須依賴標題(顯示名稱)。


UPDATE:同時請注意,您的代碼包含一個嚴重的設計缺陷。您將返回邏輯上嵌套在SPWeb實例存在範圍之外的SPWeb的對象 - 即,出於using聲明。雖然這可能適用於導航節點,但這種行爲通常會導致錯誤。這些錯誤通常由SharePoint內部處理,並且僅在記錄的錯誤消息中產生「結果」,但這確實代表了您的代碼應該生成的內容。

+0

我聯繫,提出有,但只有等環節。我也可以從PublishingWeb.GetPublishingWeb(currentWeb).Navigation.GlobalNavigation獲得鏈接但是那裏有很多垃圾!我沒有添加。如何知道哪些鏈接來自「全球導航」類別以及剛剛添加的哪個共享點? – Evgeny

+1

什麼是垃圾?如果您以編程方式添加導航節點,則可以將自定義屬性添加到節點的屬性包中,以保留一些唯一的ID。 –

+0

垃圾我的意思是在sharepoint中,我只看到「位置」「組織」和「98」節點,但在代碼中我有12-13個或更多!因爲真正的垃圾被提取。這就是爲什麼我討厭分享點! )我已經發現我可以按類型過濾項目。所以我只會得到我需要的節點。將很快發佈部分代碼。 – Evgeny

1

這個工作對我來說:

var pubWeb = PublishingWeb.GetPublishingWeb(web); 
foreach (SPNavigationNode navigationNode in pubWeb.Navigation.GlobalNavigationNodes) 
{ 
    //do stuff 
} 
+1

這應該如何幫助OP? –