SPNavigation.Children всегда возвращает 0 - PullRequest
1 голос
/ 08 мая 2011

Я работаю с фондом SP2010, но я не думаю, что многое изменилось после WSS3.

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

static void Main(string[] args)
    {
        using (SPSite site = new SPSite("http://localhost:3002/"))
        {
            SPNavigation nav =site.RootWeb.Navigation;

            //gets the correct order of top level menu items
            SPNavigationNodeCollection nodes = nav.TopNavigationBar;

            using (SPWeb web = site.OpenWeb())
            {
                SPNavigationNode toplinkbar = web.Navigation.GetNodeById(1002);
                if (toplinkbar != null)
                {
                    foreach (SPNavigationNode node in toplinkbar.Children)
                        PrintNode(node);
                }
            }
        }
        Console.Write("\nPress ENTER to continue....");
        Console.ReadLine();
    }

    static void PrintNode(SPNavigationNode node)
    {
        Console.WriteLine(node.Title);
        foreach (SPNavigationNode item in node.Children)
            PrintNode(item);
    }

Итак, первая часть toplinkbar.Children работает правильно, однако цикл foreach в узле PrintNode. Дети всегда возвращают 0, когда я знаю, что на сайте есть дочерние сайты.

Должен ли я получитьдочерние сайты, использующие SPSiteMapProvider?

Любая помощь будет отличной, так как это сводит меня с ума!

1 Ответ

0 голосов
/ 26 мая 2011

Просто используйте коллекцию NavigationNodeCollection, прикрепленную к TopNavigation. Это канонический источник информации TopNav.
Когда вы загружаете этот корневой узел таким образом, он загружается отключенным способом.
У меня есть старая запись в блоге, которая может несколько помочь. http://gavinb.net/2008/05/27/sharepoint-navigation-elements-how-to-code-with-them

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