好的 - 我创建了一个继承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等都在那里,所以它肯定会返回正确的节点。
我的问题是什么?当我将属性添加到提供程序中的节点时,该属性是否未被保留?
任何帮助或建议表示赞赏。