我在我的母版页上使用默认的 Web.Sitemap 和 SiteMapPath。我想要做的是当显示某个节点(无论是当前节点还是父节点)时,标题更改为会话变量值(如果存在)。
例如,这个:
Home / Search / Breed Information / Individual Information
会成为
Home / Search / Chihuahua / Individual Information
我按照微软的建议添加了 SiteMapResolve 事件处理程序:
http://msdn.microsoft.com/en-us/library/ms178425(v=vs.100).aspx
但是,每次我请求会话值时,它都会解析为空值。
我通过使用设置会话值
Session["BreedID"] = breedID
这是一个整数值。
SiteMapNode SiteMap_SiteMapResolve(object sender, SiteMapResolveEventArgs e)
{
SiteMapNode currentNode = SiteMap.CurrentNode.Clone(true);
SiteMapNode tempNode = currentNode;
var breedInformationNode = GetNodeByTitle("Breed Information", tempNode);
if (breedInformationNode != null)
{
if (e.Context.Request["BreedName"] != null)
{
breedInformationNode.Title = e.Context.Request["BreedName"].ToString().Replace("-", " ");
}
else if (e.Context.Session["BreedName"] != null) // This is always null
{
breedInformationNode.Title = e.Context.Session["BreedName"].ToString().Replace("-", " ");
}
}
return currentNode;
}
SiteMapNode GetNodeByTitle(string nodeName, SiteMapNode node)
{
if (node.Title == nodeName)
{
return node;
}
SiteMapNode retNode = null;
if (node.HasChildNodes)
{
foreach (SiteMapNode item in node.ChildNodes)
{
retNode = GetNodeByTitle(nodeName, item);
if (retNode != null)
{
return retNode;
}
}
}
return retNode;
}