Kel*_*ams 15
来自MSDN杂志的Jeff Prosise版本运行良好,但它有一些缺陷:
AddNode 通过菜单(www.google.com等)上的外部网站链接吓坏了
这是我的修复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);
}
Run Code Online (Sandbox Code Playgroud)
SQLDependency缓存很酷,但是如果你不想在每次加载菜单时都去数据库(检查依赖项是否已经改变)并且菜单不经常更改,那么为什么不使用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;
}
}
Run Code Online (Sandbox Code Playgroud)