【发布时间】:2010-09-05 05:37:00
【问题描述】:
有人有创建基于 SQL 的 ASP.NET 站点地图提供程序的经验吗?
我的默认 XML 文件 web.sitemap 与我的 Menu 和 SiteMapPath 控件正常工作,但我需要一种方法让我的网站用户动态创建和修改页面。
我还需要将页面查看权限绑定到标准ASP.NET 会员系统中。
【问题讨论】:
有人有创建基于 SQL 的 ASP.NET 站点地图提供程序的经验吗?
我的默认 XML 文件 web.sitemap 与我的 Menu 和 SiteMapPath 控件正常工作,但我需要一种方法让我的网站用户动态创建和修改页面。
我还需要将页面查看权限绑定到标准ASP.NET 会员系统中。
【问题讨论】:
来自 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);
}
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;
}
}
【讨论】: