Атрибуты 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 и т. Д., Есть, поэтому он определенно возвращает правильный узел.
В чем моя проблема здесь? Не сохраняется ли атрибут, когда я добавляю его в узел поставщика?
Любая помощь или предложения приветствуются.