转载自: http://blog.csdn.net/zwyl2001/archive/2007/07/29/1715267.aspx
关键的几个地方 1. 数据库结构 NodeId varchar(10) 2. 创建自定义Provider public class SqlSiteMapProvider:StaticSiteMapProvider /// 站点地图根节点 /// private SiteMapNode _RootNode = null; /// /// 清除站点地图中的节点。 /// protected override void Clear() { lock (this) { _RootNode = null; base.Clear(); } } /// /// 从数据库中检索站点数据并构建站点地图 /// /// public override SiteMapNode BuildSiteMap() { //因为SiteMap类是静态的,所以应确保站点地图被构建完成之前,他不要被修改。 lock (this) { //如果提供程序没有被初始化,抛出异常。 if (!IsInitialized) { throw new ProviderException("BuildSiteMap called incorrectly."); } if (_RootNode == null) } DbDataReader childNodesReader = _Database.ExecuteReader(command) as DbDataReader; //将图标信息添加到节点的自定义属性中。 //向根节点中添加子节点。 } } /// 获得已经构建完成的根节点。 /// /// protected override SiteMapNode GetRootNodeCore() { return RootNode; } /// /// 获取当前提供程序是否已经被初始化。 /// public virtual bool IsInitialized { get { return _Initialized; } } /// /// 获取SiteMap根节点 /// public override SiteMapNode RootNode { get { SiteMapNode temp = null; temp = BuildSiteMap(); return temp; } } /// /// 初始化提供程序。 /// /// 提供程序的名称 /// 配置参数 public override void Initialize(string name, System.Collections.Specialized.NameValueCollection config) { if (config == null) { throw new ArgumentNullException("config"); } if (string.IsNullOrEmpty(name)) { name = "AspNetSqlSiteMapProvider"; } if (string.IsNullOrEmpty(config["description"])) { config.Remove("description"); config.Add("description", "SiteMapSqlProvider_description"); } base.Initialize(name, config); string specifiedConnectionString = config["connectionStringName"]; if ((specifiedConnectionString == null) || (specifiedConnectionString.Length < 1)) { throw new ProviderException("Connection_name_not_specified"); } _Database = Microsoft.Practices.EnterpriseLibrary.Data.DatabaseFactory.CreateDatabase(specifiedConnectionString); _Initialized = true; } }
3. 配置文件修改
4. 还可以把动态部分嵌入到固定的Web.Sitemap文件中
5. 站点地图项目可以跟角色进行绑定。 通过siteMapNode元素的Roles属性指定
|
|