2008-11-12 9 views
0

Je suis en train de retourner tous les nœuds enfants d'un ensemble de noeuds de navigation dans sharepoint, le SDK implique que je devrais faire quelque chose comme ceci:MOSS SpNavigationNode.Children toujours vide

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 

mais chaque fois que je fais , il répertorie les nœuds de navigation de niveau supérieur, mais je ne parviens pas à afficher les enfants.

Répondre

0

Je faisais face à la même question: je tente d'accéder au SPWeb.Navigation.Quicklaunch du récepteur de caractéristique d'une entité scope-Web activé à partir Onet.xml, mais le SPWeb.Navigation.QuickLaunch.Count était toujours 0, même si je l'avais cas de liste certainement ajouté dans d'autres fonctions activé précédemment dans le même fichier onet.xml.

La solution pour moi était d'ouvrir une nouvelle SPSite et une nouvelle SPWeb dans mon récepteur caractéristique, après que j'ai pu accéder aux éléments de lancement rapide. Par exemple, cela a fonctionné pour moi:

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 
    } 
} 

Je suppose que c'est parce que la création du nouvel objet SPWeb charge le plus récent état de base de données et le SPWeb passé à mon récepteur fonction du Web ne représentait pas le dernier état . Mais cela me est gues

+0

se révèle la propriété isVisible est toujours faux ... – Mauro

0

J'ai ce même problème, je trouve la solution que

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); 
} 

Assurez-vous que vous avez un SiteMapDataSource associé à votre page maître lancement rapide.