好的 - 我创建了一个继承PortalSiteMapProvider的自定义导航提供程序,并且我正在尝试通过 GetChildNodes 方法扩展我的类(此处为简单示例)。
本质上,我要做的是将当前 SPWeb 的 SiteLogoUrl 字符串添加为每个 SPWeb 各自 SiteMapNode 的属性(称为 imgurl),以便稍后在我的自定义菜单控件(继承 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"]
并返回图片的url:“/_layouts/images/myimage.jpg”
现在..当我尝试在我的自定义菜单控件中执行此操作时,我首先获得了我的自定义导航提供程序的句柄,如下所示:
CustomNavProvider customProvider = (CustomNavProvider)SiteMap.Providers["CustomNavProvider"];
SiteMapNode currentNode = customProvider.FindSiteMapNode(childitem.NavigateUrl);
并且 currentNode 变量现在包含我的 SiteMapNode ......很棒,但是现在只有一个名为“AlternateUrl”的属性,而不是我之前添加的属性 - 我在提供程序中添加的 imgurl 属性现在已经消失了。所有其他属性,如 title、desc 等都在那里,所以它肯定会返回正确的节点。
我这里有什么问题?当我将属性添加到提供程序中的节点时,是否没有保留该属性?
任何帮助或建议表示赞赏。