0

マスター ページで既定の 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

ただし、セッション値を要求するたびに、null 値に解決されます。

を使用してセッション値を設定しました

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