Атрибуты SiteMapNode - значения теряются (SharePoint 2010)

ОК - я создал пользовательский поставщик навигации, который наследует PortalSiteMapProvider, и я пытаюсь расширить свой класс с помощью метода GetChildNodes ( простой пример здесь).

По сути, я пытаюсь добавить строку SiteLogoUrl текущего SPWeb в качестве атрибута (называемого imgurl) соответствующего SiteMapNode каждого SPWeb с целью получения этого значения позже в моем пользовательском элементе управления Menu (который наследует SharePoint:AspMenu).

Я устанавливаю атрибуты как в моем провайдере под GetChildNodes:

public override SiteMapNodeCollection GetChildNodes(SiteMapNode node)
    {
        PortalSiteMapNode portalNode = (PortalSiteMapNode)node;
        if (portalNode != null)
        {
            if (portalNode.Type == NodeTypes.Area)
            {
                SiteMapNodeCollection nodeColl = base.GetChildNodes(portalNode);

                using (SPSite currentSite = new SPSite(portalNode.PortalProvider.CurrentSite.Url))
                {
                    foreach (SiteMapNode topLevelNode in nodeColl)
                    {
                        foreach(SiteMapNode currentNode in topLevelNode.ChildNodes)
                        {
                            string currentWebUrl = currentNode.Url.Substring(0, currentNode.Url.ToLower().IndexOf("/pages/"));
                            using (SPWeb currentWeb = currentSite.OpenWeb(currentWebUrl))
                            {
                                if (!string.IsNullOrEmpty(currentWeb.SiteLogoUrl))
                                {
                                    currentNode["imgurl"] = currentWeb.SiteLogoUrl;
                                }
                            }                            
                        }
                    }
                }

                return nodeColl;
            }

Теперь я могу отладить это и получить значение, как только оно будет вставлено, вот так (x - это индекс узла, и я делаю это в окне командной строки):

? topLevelNode.ChildNodes [х]["imgurl"]

и это возвращает URL изображения в порядке: "/_layouts/images/myimage.jpg"

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

                CustomNavProvider customProvider = (CustomNavProvider)SiteMap.Providers["CustomNavProvider"];
                SiteMapNode currentNode = customProvider.FindSiteMapNode(childitem.NavigateUrl);

и переменная currentNode теперь содержит мой SiteMapNode... отлично, однако вместо того атрибута, который я добавил ранее, теперь есть только один атрибут с именем AlternateUrl - атрибут imgurl, который я добавил в провайдер, теперь исчез. Все остальные свойства, такие как title, desc и т. Д., Есть, поэтому он определенно возвращает правильный узел.

В чем моя проблема здесь? Не сохраняется ли атрибут, когда я добавляю его в узел поставщика?

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

0 ответов

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