SiteMapResolve中的会话变量为null

时间:2013-07-05 18:36:24

标签: c# asp.net navigation session-variables

我在母版页上使用默认的Web.Sitemap和SiteMapPath。我想要做的是当显示某个节点(无论是当前节点还是父节点)时,标题被更改为会话变量值(如果存在)。

例如,这个:

Home / Search / Breed Information / Individual Information

会变成

Home / Search / Chihuahua / Individual Information

我根据Microsoft的建议添加了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;
}

0 个答案:

没有答案