Wersja Jeff Prosise z magazynu MSDN działa całkiem dobrze, ale ma kilka wad:
AddNode
wpada w panikę z linkami do stron zewnętrznych, w menu (www.google.com, etc.)
Oto moja poprawka w BuildSiteMap()
:
SiteMapNode node = GetSiteMapNodeFromReader(reader);
string url = node.Url;
if (url.Contains(":"))
{
string garbage = Guid.NewGuid().ToString(); // SiteMapNode needs unique URLs
node.Url = "~/dummy_" + garbage + ".aspx";
AddNode(node, _root);
node.Url = url;
}
else
{
AddNode(node, _root);
}
SQLDependency
buforowanie jest fajne, ale jeśli nie chcesz, aby podróż do spędzaj DB ładuje się menu (aby sprawdzić, czy zależność uległa zmianie) i swój menu don często się zmieniają, dlaczego zamiast tego używać HttpRuntime.Cache
?
public override SiteMapNode RootNode
{
get
{
SiteMapNode temp = (SiteMapNode)HttpRuntime.Cache["SomeKeyName"];
if (temp == null)
{
temp = BuildSiteMap();
HttpRuntime.Cache.Insert("SomeKeyName", temp, null, DateTime.Now.AddHours(1), Cache.NoSlidingExpiration);
}
return temp;
}
}
Proszę wybrać najlepszą odpowiedź, dziękuję. – mruanova