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





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