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