SPNavigation - Отображение пользовательской навигации - PullRequest
1 голос
/ 18 сентября 2009

Я пытаюсь создать дополнительную навигацию на сайте переднего плана и не могу решить проблему. В приведенном ниже коде вывод отображает что-то похожее на:

water
-----water
-----pollination
-----dormancy
pollination
-----water
-----pollination
-----dormancy
dormancy
-----water
-----pollination
-----dormancy
// Loop through Root Webs in Site Collection
foreach (SPWeb TopLevelWebs in CurrentSite.AllWebs)
{
    SPNavigationNodeCollection FirstLevelWebs = TopLevelWebs.Navigation.GlobalNodes[0].Children;

    // Loop through each Child of Web
    foreach (SPNavigationNode FirstLevelWebChild in FirstLevelWebs)
    {
        // Skip over pages and only look at webs (or "Area" as it is called in 'Properties')
        if (FirstLevelWebChild.Properties["NodeType"].ToString() != "Page")
        {
            Response.Write(FirstLevelWebChild.Title + "<br />");

            SPNavigationNodeCollection SecondLevelWebs = FirstLevelWebChild.Navigation.GlobalNodes[0].Children;
            foreach (SPNavigationNode SecondLevelWebChild in SecondLevelWebs)
            {
                // Skip over pages and only look at webs (or "Area" as it is called in 'Properties')
                if (SecondLevelWebChild.Properties["NodeType"].ToString() != "Page")
                {
                    Response.Write("-----" + SecondLevelWebChild.Title + "<br />");
                }
            }
        }
    }
}

Почему приведенная выше логика не будет работать для дочерних сайтов под верхними узлами? Я не полностью понял свойство «GlobalNodes», поэтому я должен предположить, что именно в этом проблема. Но я не могу придумать решение.

Любая помощь будет принята с благодарностью.

1 Ответ

1 голос
/ 07 апреля 2010

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

SPNavigationNodeCollection SecondLevelWebs = FirstLevelWebChild.Navigation.GlobalNodes [0] .Children;

Должно быть

SPNavigationNodeCollection SecondLevelWebs = FirstLevelWebChild.Children;

Используя FirstLevelWebChild.Navigation.GlobalNodes, вы снова получаете корневую навигацию вместо суб-навигации, которую вы намереваетесь получить.

...