0

我在我的母版页上使用默认的 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;
}
4

0 回答 0