2008-11-12 51 views
0

我試圖返回一組在SharePoint導航節點的所有子節點,該SDK意味着我應該做這樣的事情:MOSS SpNavigationNode.Children總是空

NodeColl = objSite.Navigation.TopNavigationBar 
Dim Node as SPNavigationNode 

For Each Node In NodeColl 
    if Node.IsVisible then 
    Response.Write("<siteMapNode url=""" & Node.Url & """ title=""" & Node.Title & """ description=""" & Node.Title & """ >" & Environment.NewLine) 
    Dim SubChildNodes as SPNavigationNodeCollection = Node.Children 
    Response.Write(SubChildNodes.Count) 'returns 0 always even though I know theres over 20 nodes in some of the sections 
    Dim ChildNode as SPNavigationNode 
    For Each ChildNode in SubChildNodes 
     if ChildNode.IsVisible then 
     Response.Write("<siteMapNode url=""" & ChildNode.Url & """ title=""" & ChildNode.Title & """ description=""" & ChildNode.Title & """ />" & Environment.NewLine) 
     End if 
    Next 
    Response.Write("</siteMapNode>" & Environment.NewLine) 
    End If 
Next 

但是每當我做,它列出了頂級導航節點,但我無法讓孩子顯示。

回答

0

我正面臨同樣的問題:我試圖訪問從onet.xml激活的web作用域功能的接收器SPWeb.Navigation.Quicklaunch,但SPWeb.Navigation.QuickLaunch.Count始終爲0,儘管我已經在其他功能中明確添加了列表實例之前在相同的onet.xml中激活。

對我來說,解決方案是在我的功能接收器中打開一個新的SPSite和一個新的SPWeb,之後我可以訪問快速啓動項目。例如,這工作對我來說:

​​

我假設這是因爲在創建新的SPWeb對象從數據庫加載網頁的最新狀態,並傳遞給我的功能,接收器的SPWeb並不代表​​最新的狀態。但這是我g12

+0

原來isVisible屬性總是錯誤的... – Mauro 2012-08-01 14:28:26

0

我有同樣的問題,我找到了解決方案,

using (SPSite site = new SPSite("http://server")) 
{ 
    using (SPWeb web = site.OpenWeb()) 
    { 
     SPNavigationNode quicklaunch = web.Navigation.GetNodeById(1025); 
     if (quicklaunch != null) 
     { 
      foreach (SPNavigationNode heading in quicklaunch.Children) 
      { 
       PrintNode(heading); 
      } 
     } 
    } 
} 

static void PrintNode(SPNavigationNode node) 
{ 
    foreach (SPNavigationNode item in node.Children) 
     PrintNode(item); 
} 

確保你有你的母版頁的快速啓動相關的SiteMapDataSource