SiteMapNode属性 - 丢失的值(SharePoint 2010)

时间:2012-12-04 17:42:01

标签: sharepoint sharepoint-2010 menu aspmenu sitemapnode

好的 - 我创建了一个继承PortalSiteMapProvider的自定义导航提供程序,我正在尝试通过GetChildNodes方法(Simple example here)扩展我的类。

基本上我要做的是将当前SPWeb的SiteLogoUrl字符串添加为每个SPWeb各自的SiteMapNode的属性(称为imgurl),以便稍后在我的自定义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 [X] [ “imgUrl的”]

并返回图片的网址:“/ _ layouts / images / myimage.jpg”

现在..当我尝试在我的自定义菜单控件中执行此操作时,我首先获得自定义导航提供程序的句柄,如下所示:

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

并且currentNode变量现在包含我的SiteMapNode ...很好,但是我现在只有一个名为'AlternateUrl'的属性,而不是我之前添加的属性 - 我在提供程序中添加的imgurl属性现在已经消失了。所有其他属性,如title,desc等都在那里,所以它肯定会返回正确的节点。

我的问题是什么?当我将属性添加到提供程序中的节点时,该属性是否未被保留?

任何帮助或建议表示赞赏。

0 个答案:

没有答案