Domanda

Sto cercando di restituire tutti i nodi figlio di una serie di nodi di navigazione in sharepoint, l'SDK implica che dovrei fare qualcosa del genere:

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

tuttavia ogni volta che lo faccio, elenca i nodi di navigazione di livello superiore ma non riesco a visualizzare i bambini.

È stato utile?

Soluzione

Stavo affrontando lo stesso problema: stavo cercando di accedere a SPWeb.Navigation.Quicklaunch da un ricevitore di funzionalità di una funzionalità con ambito Web attivato da onet.xml, ma SPWeb.Navigation .QuickLaunch.Count era sempre 0, anche se avevo sicuramente aggiunto istanze di elenco in altre funzionalità attivate in precedenza nello stesso onet.xml.

La soluzione per me era aprire un nuovo SPSite e un nuovo SPWeb nel mio ricevitore di funzioni, dopo di che sono stato in grado di accedere agli elementi di avvio rapido. Ad esempio, questo ha funzionato per me:

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

Suppongo che ciò avvenga perché la creazione del nuovo oggetto SPWeb carica lo stato più recente del Web dal database e l'SPWeb passato al mio ricevitore di funzioni non rappresentava l'ultimo stato. Ma questo sono io ragazzi

Altri suggerimenti

Ho lo stesso problema, ho trovato la soluzione come

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

Assicurati di avere un SiteMapDataSource associato all'avvio rapido della tua pagina principale.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top