MOSS SpNavigationNode.Children всегда пусто

Я пытаюсь вернуть все дочерние узлы набора узлов навигации в 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

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
1 586
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

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

Ответ принят как подходящий

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

Другие вопросы по теме