2008-11-12 5 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

Я столкнулся с таким же вопросом: Я пытался получить доступ к SPWeb.Navigation.Quicklaunch из художественного приемника веба-области действия особенности в активированном от onet.xml, но SPWeb.Navigation.QuickLaunch.Count всегда 0 был, хотя я определенно добавил список экземпляров в других функциях активированный ранее в том же onet.xml.

Решение для меня состояло в том, чтобы открыть новый SPSite и новый SPWeb в моем приемнике функций, после чего я смог получить доступ к элементам быстрого запуска. Например, это работает для меня:

using (SPSite site = new SPSite("http://yourserver/")) 
{ 
    using (SPweb web = site.OpenWeb("theweb")) 
    { 
    web.Navigation.QuickLaunch.Count ; // greater than zero 

    // manipulate your quick launch here 
    } 
} 

Я предполагаю, что это потому, что создание нового объекта SPWeb загружает последнее состояние Паутины из базы данных, и SPWeb перешел к моей особенности приемнику не представляет последнее состояние , Но это я gues

+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, связанный с вашим мастером страницы быстрого запуска.

Смежные вопросы