澳门新葡萄京娱乐场用 Web.sitemap 轻松建立“返回首页”导航条

首先建立一个 Web.sitemap 文件,此为一个 XML 格式的文件,内容类似如下:

转自:

[索引页]
[源码下载]

<?xml version=”1.0″ encoding=”utf-8″ ?> <siteMap
xmlns=”” >
<siteMapNode url=”~/Default.aspx” title=”首页” description=””>
<siteMapNode url=”~/News.aspx” title=”新闻管理” description=”” />
<siteMapNode url=”~/Category.aspx” title=”栏目管理” description=””
/> <siteMapNode url=”~/User.aspx” title=”用户管理” description=””
/> </siteMapNode> </siteMap>

最近在博客里写了一些日志,主要都是我在实际编程过程中遇到的问题。问题出现后,先自己推敲,搞不定的,就上网去搜,再就是请教同学、同事,从中获益匪浅,也很难得!现在把感觉比较实用的一些功能代码之类的发布到网上去,发觉自己在网上收的不全面,有的根本就不能用,我呢是把我的项目代码给贴出来的,绝对经过实践的!在此希望能帮到人,也方便以后自己再用到!好了,下面就是代码了!

温故知新ASP.NET 2.0(C#)(3) – SiteMap(站点地图)

可以看到,“首页”包含了子项“新闻管理”、“栏目管理”、“用户管理”。每一项的
url 要与其实际的页面的 Url 对应。

首先要创建一个站点地图Web.sitemap,最好在根目录下,Web.sitemap中的代码如下,为简便些,省去了一部分代码:

作者:webabcd

第二步,拖入一个 SiteMapPath 到 ASP.NET 页面中:

<?xml version=”1.0″ encoding=”utf-8″ ?>
<siteMap xmlns=”http://schemas.microsoft.com/AspNet/SiteMap-File-1.0″
>
    <siteMapNode url=”~/Admin/Admin.aspx” title=”首页”  
description=”首页描述”>
    <siteMapNode url=”~/Admin/ChangePwd.aspx” title=”频道1″  
description=”频道1描述” />
    <siteMapNode url=”~/Admin/ChangePhoto.aspx” title=”频道2″
description=”频道2描述” />
  </siteMapNode>
</siteMap>

介绍
ASP.NET 2.0
中的站点导航提供程序向应用程序中的页公开导航信息,使您可以独立于页的实际物理布局定义站点的结构。默认站点导航提供程序基于XML,但通过为站点地图编写自定义提供程序,也可以从任意后端公开此信息。

<asp:SiteMapPath ID=”SiteMapPath1″
runat=”server”></asp:SiteMapPath>

站点地图里可随意添加,多少都行,很多的话,可得理清节点的“父子关系”哦!

关键
1、创建.sitemap文件,其实就是一个xml文件,包括有着层次结构的<siteMapNode>元素

效果

然后就是配置Web.Config,这个很重要:

2、<siteMapNode>元素的属性:
  Url – 链接地址
  Title – 显示的标题
  Description – 描述(ToolTip)
  resourceKey –
本地化用的(要在<siteMap>节点加上这个属性enableLocalization=true)   
  securityTrimmingEnabled – 是否让sitemap支持安全特性
  roles –
哪些角色可以访问当前节点,多角色用逗号隔开(需要将securityTrimmingEnabled设置为true)
  siteMapFile – 引用另一个sitemap文件
 
注:应用权限的时候,Web.config中的SiteMap节点的Provider也要有相对应的配置(securityTrimmingEnabled=”true”)

当访问“新闻管理”时,自动识别 Url,然后与 Web.sitemap 匹配,效果类似:

<system.web>

3、可以通过SiteMap和SiteMapNode类访问站点地图数据

首页 > 新闻管理

<siteMap defaultProvider=”default” enabled=”true”>
      <providers>
        <add name=”default”
type=”System.Web.XmlSiteMapProvider” siteMapFile=”Web.sitemap”securityTrimmingEnabled=”true”/>
      </providers>
    </siteMap>
 </system.web>

4、自定义站点地图提供程序应该写一个继承自StaticSiteMapProvider的类

其中首页还有超链接呢。

<!–红色部分的名称可一定得一样哈!蓝色部分也不能少,不然程序找不到地图!–>

5、XmlSiteMapProvider要求站点地图节点具有唯一的URL

这样,就算配置好了,下面就是具体应用了

示例
SiteMap/Web.sitemap(包括一个有siteMapFile属性的节点)

我的是修改密码页,那么就在~/Admin/ChangePwd.aspx页面里的头部(一般都是现实在顶部)

澳门新葡萄京娱乐场 1<?xml version=”1.0″ encoding=”utf-8″ ?>
澳门新葡萄京娱乐场 2<siteMap xmlns=”” >
澳门新葡萄京娱乐场 3  <siteMapNode url=”~/SiteMap/Test.aspx#1″ title=”首页”  description=”首页描述”>
澳门新葡萄京娱乐场 4    <siteMapNode url=”~/SiteMap/Test.aspx#2″ title=”频道1″  description=”频道1描述” />
澳门新葡萄京娱乐场 5    <siteMapNode url=”~/SiteMap/Test.aspx#3″ title=”频道2″ description=”频道2描述” />
澳门新葡萄京娱乐场 6    <siteMapNode siteMapFile=”WebChild.sitemap”>
澳门新葡萄京娱乐场 7    </siteMapNode>
澳门新葡萄京娱乐场 8    <siteMapNode url=”~/SiteMap/Test.aspx#4″ title=”频道4″ description=”频道4描述” />
澳门新葡萄京娱乐场 9  </siteMapNode>
澳门新葡萄京娱乐场 10</siteMap>
澳门新葡萄京娱乐场 11

插入控件<asp:SiteMapPath>控件,代码是:

SiteMap/WebChild.sitemap(上面.sitemap文件某个节点的siteMapFile属性所指定的文件)

<asp:SiteMapPath ID=”SiteMapPath1″
runat=”server”></asp:SiteMapPath>

澳门新葡萄京娱乐场 12<?xml version=”1.0″ encoding=”utf-8″ ?>
澳门新葡萄京娱乐场 13<siteMap xmlns=”” >
澳门新葡萄京娱乐场 14  <siteMapNode url=”~/SiteMap/Test.aspx#5″ title=”频道3″  description=”频道3″>
澳门新葡萄京娱乐场 15    <siteMapNode url=”~/SiteMap/Test.aspx#6″ title=”栏目1″  description=”栏目1描述” />
澳门新葡萄京娱乐场 16    <siteMapNode url=”~/SiteMap/Test.aspx#7″ title=”栏目2″  description=”栏目2描述” />
澳门新葡萄京娱乐场 17    <siteMapNode url=”~/SiteMap/Test.aspx#8″ title=”栏目3″  description=”栏目3描述” />
澳门新葡萄京娱乐场 18  </siteMapNode>
澳门新葡萄京娱乐场 19</siteMap>
澳门新葡萄京娱乐场 20

至此,已经全部OK了!至于网上有的说使用<asp:SiteMapDataSource>控件绑定数据,本人经实践,觉得完全没必要!

站点地图测试
SiteMap/Test.aspx

其实挺简单的,总结来说,就是先创建一个站点地图Web.sitemap,把所有用到的节点都写进去,

澳门新葡萄京娱乐场 21澳门新葡萄京娱乐场 22<%澳门新葡萄京娱乐场 23@ Page Language=”C#” MasterPageFile=”~/Site.master” AutoEventWireup=”true” CodeFile=”Test.aspx.cs”
澳门新葡萄京娱乐场 24    Inherits=”SiteMap_Test” Title=”站点地图测试” %>
澳门新葡萄京娱乐场 25
澳门新葡萄京娱乐场 26<asp:Content ID=”Content1″ ContentPlaceHolderID=”ContentPlaceHolder1″ runat=”Server”>
澳门新葡萄京娱乐场 27    <p>
澳门新葡萄京娱乐场 28        <asp:TreeView ID=”TreeView1″ runat=”server” DataSourceID=”SiteMapDataSource1″>
澳门新葡萄京娱乐场 29        </asp:TreeView>
澳门新葡萄京娱乐场 30        <asp:Menu ID=”Menu1″ runat=”server” DataSourceID=”SiteMapDataSource2″ Orientation=”Horizontal”>
澳门新葡萄京娱乐场 31        </asp:Menu>
澳门新葡萄京娱乐场 32澳门新葡萄京娱乐场 33        <%澳门新葡萄京娱乐场 34–显示根节点的数据源–%>
澳门新葡萄京娱乐场 35        <asp:SiteMapDataSource ID=”SiteMapDataSource1″ runat=”server” SiteMapProvider=”XmlSiteMapProviderTest” />
澳门新葡萄京娱乐场 36澳门新葡萄京娱乐场 37        <%澳门新葡萄京娱乐场 38–不显示根节点的数据源–%>
澳门新葡萄京娱乐场 39        <asp:SiteMapDataSource ID=”SiteMapDataSource2″ runat=”server” SiteMapProvider=”XmlSiteMapProviderTest”
澳门新葡萄京娱乐场 40            ShowStartingNode=”false” />
澳门新葡萄京娱乐场 41    </p>
澳门新葡萄京娱乐场 42    <p>
澳门新葡萄京娱乐场 43        编码方式访问节点信息如下<br />
澳门新葡萄京娱乐场 44        <asp:Label ID=”lbl” runat=”server” BackColor=”#DDDDDD” />
澳门新葡萄京娱乐场 45    </p>
澳门新葡萄京娱乐场 46</asp:Content>
澳门新葡萄京娱乐场 47

然后就是配置Web.Config,把站点地图的名称给写进去!

SiteMap/Test.aspx.cs

最后就是实际应用了,要在每个可能使用到导航的页面里添加一个<asp:SiteMapPath>控件就行了!

澳门新葡萄京娱乐场 48using System;
澳门新葡萄京娱乐场 49using System.Data;
澳门新葡萄京娱乐场 50using System.Configuration;
澳门新葡萄京娱乐场 51using System.Collections;
澳门新葡萄京娱乐场 52using System.Web;
澳门新葡萄京娱乐场 53using System.Web.Security;
澳门新葡萄京娱乐场 54using System.Web.UI;
澳门新葡萄京娱乐场 55using System.Web.UI.WebControls;
澳门新葡萄京娱乐场 56using System.Web.UI.WebControls.WebParts;
澳门新葡萄京娱乐场 57using System.Web.UI.HtmlControls;
澳门新葡萄京娱乐场 58
澳门新葡萄京娱乐场 59public partial class SiteMap_Test : System.Web.UI.Page
澳门新葡萄京娱乐场 60澳门新葡萄京娱乐场 61澳门新葡萄京娱乐场 62{
澳门新葡萄京娱乐场 63    protected void Page_Load(object sender, EventArgs e)
澳门新葡萄京娱乐场 64澳门新葡萄京娱乐场 65    澳门新葡萄京娱乐场 66{
澳门新葡萄京娱乐场 67        // 获取当前节点的Title
澳门新葡萄京娱乐场 68        lbl.Text = “当前节点标题:” + SiteMap.CurrentNode.Title + “<br />”;
澳门新葡萄京娱乐场 69
澳门新葡萄京娱乐场 70        // 取得url为“~/Default.aspx”的SiteMapNode
澳门新葡萄京娱乐场 71        SiteMapNode smn = SiteMap.Provider.FindSiteMapNode(“~/Default.aspx”);
澳门新葡萄京娱乐场 72        lbl.Text += “Default.aspx节点的Url:” + smn.Url;
澳门新葡萄京娱乐场 73    }
澳门新葡萄京娱乐场 74}
澳门新葡萄京娱乐场 75

站点地图测试(从数据库读数据)
SiteMap/FromDatabase.aspx

澳门新葡萄京娱乐场 76澳门新葡萄京娱乐场 77<%澳门新葡萄京娱乐场 78@ Page Language=”C#” MasterPageFile=”~/Site.master” AutoEventWireup=”true” CodeFile=”FromDatabase.aspx.cs”
澳门新葡萄京娱乐场 79    Inherits=”SiteMap_FromDatabase” Title=”站点地图测试(从数据库读数据)” %>
澳门新葡萄京娱乐场 80
澳门新葡萄京娱乐场 81<asp:Content ID=”Content1″ ContentPlaceHolderID=”ContentPlaceHolder1″ runat=”Server”>
澳门新葡萄京娱乐场 82    <asp:TreeView ID=”TreeView1″ runat=”server” DataSourceID=”SiteMapDataSource1″>
澳门新葡萄京娱乐场 83    </asp:TreeView>
澳门新葡萄京娱乐场 84    <asp:SiteMapDataSource ID=”SiteMapDataSource1″ runat=”server” SiteMapProvider=”SqlSiteMapProvider” />
澳门新葡萄京娱乐场 85</asp:Content>
澳门新葡萄京娱乐场 86

自定义站点地图提供程序(SqlServer方式)
SqlSiteMapProvider.cs(“sp_GetSiteMap”为读取站点地图数据的存储过程,详见源码)

澳门新葡萄京娱乐场 87using System;
澳门新葡萄京娱乐场 88using System.Web;
澳门新葡萄京娱乐场 89using System.Data.SqlClient;
澳门新葡萄京娱乐场 90using System.Collections.Specialized;
澳门新葡萄京娱乐场 91using System.Configuration;
澳门新葡萄京娱乐场 92using System.Web.Configuration;
澳门新葡萄京娱乐场 93using System.Collections.Generic;
澳门新葡萄京娱乐场 94using System.Configuration.Provider;
澳门新葡萄京娱乐场 95using System.Security.Permissions;
澳门新葡萄京娱乐场 96using System.Data.Common;
澳门新葡萄京娱乐场 97using System.Data;
澳门新葡萄京娱乐场 98
澳门新葡萄京娱乐场 99澳门新葡萄京娱乐场 100/**//// <summary>
澳门新葡萄京娱乐场 101/// SqlSiteMapProvider
澳门新葡萄京娱乐场 102/// </summary>
澳门新葡萄京娱乐场 103public class SqlSiteMapProvider : StaticSiteMapProvider
澳门新葡萄京娱乐场 104澳门新葡萄京娱乐场 105澳门新葡萄京娱乐场 106{
澳门新葡萄京娱乐场 107    private string _strCon;
澳门新葡萄京娱乐场 108    private int _indexID, _indexTitle, _indexUrl, _indexDesc, _indexParent;
澳门新葡萄京娱乐场 109
澳门新葡萄京娱乐场 110    // 节点
澳门新葡萄京娱乐场 111    private SiteMapNode _node;
澳门新葡萄京娱乐场 112    
澳门新葡萄京娱乐场 113    // 节点字典表
澳门新葡萄京娱乐场 114    private Dictionary<int, SiteMapNode> _nodes = new Dictionary<int, SiteMapNode>();
澳门新葡萄京娱乐场 115   
澳门新葡萄京娱乐场 116    // for 线程安全
澳门新葡萄京娱乐场 117    private readonly object _lock = new object();
澳门新葡萄京娱乐场 118
澳门新葡萄京娱乐场 119澳门新葡萄京娱乐场 120    /**//// <summary>
澳门新葡萄京娱乐场 121    /// 初始化
澳门新葡萄京娱乐场 122    /// </summary>
澳门新葡萄京娱乐场 123    /// <param name=”name”>name</param>
澳门新葡萄京娱乐场 124    /// <param name=”config”>config</param>
澳门新葡萄京娱乐场 125    public override void Initialize(string name, NameValueCollection config)
澳门新葡萄京娱乐场 126澳门新葡萄京娱乐场 127    澳门新葡萄京娱乐场 128{
澳门新葡萄京娱乐场 129        // 验证是否有config
澳门新葡萄京娱乐场 130        if (config == null)
澳门新葡萄京娱乐场 131            throw new ArgumentNullException(“config不能是null”);
澳门新葡萄京娱乐场 132
澳门新葡萄京娱乐场 133        // 没有provider则设置为默认的
澳门新葡萄京娱乐场 134        if (String.IsNullOrEmpty(name))
澳门新葡萄京娱乐场 135            name = “SqlSiteMapProvider”;
澳门新葡萄京娱乐场 136
澳门新葡萄京娱乐场 137        // 没有描述就增加一个描述
澳门新葡萄京娱乐场 138        if (string.IsNullOrEmpty(config[“description”]))
澳门新葡萄京娱乐场 139澳门新葡萄京娱乐场 140        澳门新葡萄京娱乐场 141{
澳门新葡萄京娱乐场 142            config.Remove(“description”);
澳门新葡萄京娱乐场 143            config.Add(“description”, “SqlSiteMapProvider”);
澳门新葡萄京娱乐场 144        }
澳门新葡萄京娱乐场 145
澳门新葡萄京娱乐场 146        // 调用基类的初始化方法
澳门新葡萄京娱乐场 147        base.Initialize(name, config);
澳门新葡萄京娱乐场 148
澳门新葡萄京娱乐场 149        // 初始化连接字符串
澳门新葡萄京娱乐场 150        string conStringName = config[“connectionStringName”];
澳门新葡萄京娱乐场 151
澳门新葡萄京娱乐场 152        if (String.IsNullOrEmpty(conStringName))
澳门新葡萄京娱乐场 153            throw new ProviderException(“没找到connectionStringName”);
澳门新葡萄京娱乐场 154
澳门新葡萄京娱乐场 155        config.Remove(“connectionStringName”);
澳门新葡萄京娱乐场 156
澳门新葡萄京娱乐场 157        if (WebConfigurationManager.ConnectionStrings[conStringName] == null)
澳门新葡萄京娱乐场 158            throw new ProviderException(“根据connectionStringName没找到连接字符串”);
澳门新葡萄京娱乐场 159
澳门新葡萄京娱乐场 160        // 获得连接字符串
澳门新葡萄京娱乐场 161        _strCon = WebConfigurationManager.ConnectionStrings[conStringName].ConnectionString;
澳门新葡萄京娱乐场 162
澳门新葡萄京娱乐场 163        if (String.IsNullOrEmpty(_strCon))
澳门新葡萄京娱乐场 164            throw new ProviderException(“连接字符串是空的”);
澳门新葡萄京娱乐场 165    }
澳门新葡萄京娱乐场 166
澳门新葡萄京娱乐场 167澳门新葡萄京娱乐场 168    /**//// <summary>
澳门新葡萄京娱乐场 169    /// 从持久性存储区加载站点地图信息,并在内存中构建它
澳门新葡萄京娱乐场 170    /// </summary>
澳门新葡萄京娱乐场 171    /// <returns></returns>
澳门新葡萄京娱乐场 172    public override SiteMapNode BuildSiteMap()
澳门新葡萄京娱乐场 173澳门新葡萄京娱乐场 174    澳门新葡萄京娱乐场 175{
澳门新葡萄京娱乐场 176        lock (_lock)
澳门新葡萄京娱乐场 177澳门新葡萄京娱乐场 178        澳门新葡萄京娱乐场 179{
澳门新葡萄京娱乐场 180            // 线程安全的实现
澳门新葡萄京娱乐场 181            if (_node != null)
澳门新葡萄京娱乐场 182                return _node;
澳门新葡萄京娱乐场 183
澳门新葡萄京娱乐场 184            SqlConnection connection = new SqlConnection(_strCon);
澳门新葡萄京娱乐场 185
澳门新葡萄京娱乐场 186            try
澳门新葡萄京娱乐场 187澳门新葡萄京娱乐场 188            澳门新葡萄京娱乐场 189{
澳门新葡萄京娱乐场 190                SqlCommand command = new SqlCommand(“sp_GetSiteMap”, connection);
澳门新葡萄京娱乐场 191                command.CommandType = CommandType.StoredProcedure;
澳门新葡萄京娱乐场 192
澳门新葡萄京娱乐场 193                connection.Open();
澳门新葡萄京娱乐场 194                SqlDataReader reader = command.ExecuteReader();
澳门新葡萄京娱乐场 195
澳门新葡萄京娱乐场 196                // 获得各个字段的索引
澳门新葡萄京娱乐场 197                _indexID = reader.GetOrdinal(“ID”);
澳门新葡萄京娱乐场 198                _indexUrl = reader.GetOrdinal(“Url”);
澳门新葡萄京娱乐场 199                _indexTitle = reader.GetOrdinal(“Title”);
澳门新葡萄京娱乐场 200                _indexDesc = reader.GetOrdinal(“Description”);
澳门新葡萄京娱乐场 201                _indexParent = reader.GetOrdinal(“Parent”);
澳门新葡萄京娱乐场 202
澳门新葡萄京娱乐场 203                if (reader.Read())
澳门新葡萄京娱乐场 204澳门新葡萄京娱乐场 205                澳门新葡萄京娱乐场 206{
澳门新葡萄京娱乐场 207                    // 把第一条记录作为根节点添加
澳门新葡萄京娱乐场 208                    _node = CreateSiteMapNodeFromDataReader(reader);
澳门新葡萄京娱乐场 209                    AddNode(_node, null);
澳门新葡萄京娱乐场 210
澳门新葡萄京娱乐场 211                    // 构造节点树
澳门新葡萄京娱乐场 212                    while (reader.Read())
澳门新葡萄京娱乐场 213澳门新葡萄京娱乐场 214                    澳门新葡萄京娱乐场 215{
澳门新葡萄京娱乐场 216                        // 在站点地图中增加一个节点
澳门新葡萄京娱乐场 217                        SiteMapNode node = CreateSiteMapNodeFromDataReader(reader);
澳门新葡萄京娱乐场 218                        AddNode(node, GetParentNodeFromDataReader(reader));
澳门新葡萄京娱乐场 219                    }
澳门新葡萄京娱乐场 220
澳门新葡萄京娱乐场 221                }
澳门新葡萄京娱乐场 222
澳门新葡萄京娱乐场 223                reader.Close();
澳门新葡萄京娱乐场 224            }
澳门新葡萄京娱乐场 225            catch (Exception ex)
澳门新葡萄京娱乐场 226澳门新葡萄京娱乐场 227            澳门新葡萄京娱乐场 228{
澳门新葡萄京娱乐场 229                throw new Exception(ex.ToString());
澳门新葡萄京娱乐场 230            }
澳门新葡萄京娱乐场 231            finally
澳门新葡萄京娱乐场 232澳门新葡萄京娱乐场 233            澳门新葡萄京娱乐场 234{
澳门新葡萄京娱乐场 235                connection.Close();
澳门新葡萄京娱乐场 236            }
澳门新葡萄京娱乐场 237
澳门新葡萄京娱乐场 238            // 返回SiteMapNode
澳门新葡萄京娱乐场 239            return _node;
澳门新葡萄京娱乐场 240        }
澳门新葡萄京娱乐场 241    }
澳门新葡萄京娱乐场 242
澳门新葡萄京娱乐场 243澳门新葡萄京娱乐场 244    /**//// <summary>
澳门新葡萄京娱乐场 245    /// 将检索目前由当前提供程序管理的所有节点的根节点
澳门新葡萄京娱乐场 246    /// </summary>
澳门新葡萄京娱乐场 247    /// <returns></returns>
澳门新葡萄京娱乐场 248    protected override SiteMapNode GetRootNodeCore()
澳门新葡萄京娱乐场 249澳门新葡萄京娱乐场 250    澳门新葡萄京娱乐场 251{
澳门新葡萄京娱乐场 252        lock (_lock)
澳门新葡萄京娱乐场 253澳门新葡萄京娱乐场 254        澳门新葡萄京娱乐场 255{
澳门新葡萄京娱乐场 256            return BuildSiteMap();
澳门新葡萄京娱乐场 257        }
澳门新葡萄京娱乐场 258    }
澳门新葡萄京娱乐场 259
澳门新葡萄京娱乐场 260澳门新葡萄京娱乐场 261    /**//// <summary>
澳门新葡萄京娱乐场 262    /// 根据DataReader读出来的数据返回SiteMapNode
澳门新葡萄京娱乐场 263    /// </summary>
澳门新葡萄京娱乐场 264    /// <param name=”reader”>DbDataReader</param>
澳门新葡萄京娱乐场 265    /// <returns></returns>
澳门新葡萄京娱乐场 266    private SiteMapNode CreateSiteMapNodeFromDataReader(DbDataReader reader)
澳门新葡萄京娱乐场 267澳门新葡萄京娱乐场 268    澳门新葡萄京娱乐场 269{
澳门新葡萄京娱乐场 270        if (reader.IsDBNull(_indexID))
澳门新葡萄京娱乐场 271            throw new ProviderException(“没找到ID”);
澳门新葡萄京娱乐场 272
澳门新葡萄京娱乐场 273        int id = reader.GetInt32(_indexID);
澳门新葡萄京娱乐场 274
澳门新葡萄京娱乐场 275        if (_nodes.ContainsKey(id))
澳门新葡萄京娱乐场 276            throw new ProviderException(“不能有重复ID”);
澳门新葡萄京娱乐场 277
澳门新葡萄京娱乐场 278        // 根据字段索引获得相应字段的值
澳门新葡萄京娱乐场 279        string title = reader.IsDBNull(_indexTitle) ? null : reader.GetString(_indexTitle).Trim();
澳门新葡萄京娱乐场 280        string url = reader.IsDBNull(_indexUrl) ? null : reader.GetString(_indexUrl).Trim();
澳门新葡萄京娱乐场 281        string description = reader.IsDBNull(_indexDesc) ? null : reader.GetString(_indexDesc).Trim();
澳门新葡萄京娱乐场 282
澳门新葡萄京娱乐场 283        // 新建一个SiteMapNode
澳门新葡萄京娱乐场 284        SiteMapNode node = new SiteMapNode(this, id.ToString(), url, title, description);
澳门新葡萄京娱乐场 285
澳门新葡萄京娱乐场 286        // 把这个SiteMapNode添加进节点字典表里
澳门新葡萄京娱乐场 287        _nodes.Add(id, node);
澳门新葡萄京娱乐场 288
澳门新葡萄京娱乐场 289        // 返回这个SiteMapNode
澳门新葡萄京娱乐场 290        return node;
澳门新葡萄京娱乐场 291    }
澳门新葡萄京娱乐场 292
澳门新葡萄京娱乐场 293澳门新葡萄京娱乐场 294    /**//// <summary>
澳门新葡萄京娱乐场 295    /// 得到父节点的SiteMapNode
澳门新葡萄京娱乐场 296    /// </summary>
澳门新葡萄京娱乐场 297    /// <param name=”reader”></param>
澳门新葡萄京娱乐场 298    /// <returns></returns>
澳门新葡萄京娱乐场 299    private SiteMapNode GetParentNodeFromDataReader(DbDataReader reader)
澳门新葡萄京娱乐场 300澳门新葡萄京娱乐场 301    澳门新葡萄京娱乐场 302{
澳门新葡萄京娱乐场 303        if (reader.IsDBNull(_indexParent))
澳门新葡萄京娱乐场 304            throw new ProviderException(“父节点不能是空”);
澳门新葡萄京娱乐场 305
澳门新葡萄京娱乐场 306        int pid = reader.GetInt32(_indexParent);
澳门新葡萄京娱乐场 307
澳门新葡萄京娱乐场 308        if (!_nodes.ContainsKey(pid))
澳门新葡萄京娱乐场 309            throw new ProviderException(“有重复节点ID”);
澳门新葡萄京娱乐场 310
澳门新葡萄京娱乐场 311        // 返回父节点的SiteMapNode
澳门新葡萄京娱乐场 312        return _nodes[pid];
澳门新葡萄京娱乐场 313    }
澳门新葡萄京娱乐场 314
澳门新葡萄京娱乐场 315
澳门新葡萄京娱乐场 316}

上面两个测试页面所需的web.config中的配置

澳门新葡萄京娱乐场 317<configuration>
澳门新葡萄京娱乐场 318  <appSettings/>
澳门新葡萄京娱乐场 319  <connectionStrings>
澳门新葡萄京娱乐场 320    <add name=”SqlConnectionString” connectionString=”Data Source=.SQLEXPRESS;AttachDbFilename=|DataDirectory|Database.mdf;Integrated Security=True;User Instance=True”/>
澳门新葡萄京娱乐场 321  </connectionStrings>
澳门新葡萄京娱乐场 322  <system.web>
澳门新葡萄京娱乐场 323    <siteMap enabled=”true” defaultProvider=”XmlSiteMapProvider”>
澳门新葡萄京娱乐场 324      <providers>
澳门新葡萄京娱乐场 325        <add name=”XmlSiteMapProvider” type=”System.Web.XmlSiteMapProvider, System.Web, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a” siteMapFile=”~/Web.sitemap”/>
澳门新葡萄京娱乐场 326        <add name=”XmlSiteMapProviderTest” type=”System.Web.XmlSiteMapProvider, System.Web, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a” siteMapFile=”~/Sitemap/Web.sitemap”/>
澳门新葡萄京娱乐场 327        <add name=”SqlSiteMapProvider” type=”SqlSiteMapProvider” connectionStringName=”SqlConnectionString” />
澳门新葡萄京娱乐场 328      </providers>
澳门新葡萄京娱乐场 329    </siteMap>
澳门新葡萄京娱乐场 330  </system.web>
澳门新葡萄京娱乐场 331</configuration>

OK
[源码下载]

发表评论

电子邮件地址不会被公开。 必填项已用*标注