Phiên bản Jeff Prosise từ tạp chí MSDN hoạt động khá tốt, nhưng nó có một vài sai sót:
AddNode
freaks ra với các liên kết đến các trang web bên ngoài vào thực đơn của bạn (www.google.com, vv)
Dưới đây là sửa chữa của tôi trong 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
bộ nhớ đệm là mát mẻ, nhưng nếu bạn không muốn thực hiện một chuyến đi đến mọi DB tải thực đơn của bạn (để kiểm tra xem nếu phụ thuộc đã thay đổi) và bạn menu don không thay đổi thường xuyên, vậy tại sao không sử dụng HttpRuntime.Cache
để thay thế?
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;
}
}
Nguồn
2008-09-23 22:41:11
Vui lòng chọn câu trả lời hay nhất, cảm ơn. – mruanova