MOSS SpNavigationNode.Дети всегда пустые - PullRequest
0 голосов
/ 12 ноября 2008

Я пытаюсь вернуть все дочерние узлы набора узлов навигации в sharepoint, SDK подразумевает, что я должен делать что-то вроде этого:

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

однако всякий раз, когда я это делаю, в нем перечислены узлы навигации верхнего уровня, но я не могу отобразить дочерние элементы.

Ответы [ 2 ]

0 голосов
/ 03 апреля 2012

Я столкнулся с той же проблемой: я пытался получить доступ к 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, переданный моему приемнику функций, не представляет последнее состояние. Но это я догадки

0 голосов
/ 07 января 2011

У меня такая же проблема, я нашел решение как

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...