·您现在的位置: 云翼网络 >> 文章中心 >> 网站建设 >> 网站建设开发 >> ASP.NET网站开发 >> 网站地图

网站地图

作者:佚名      ASP.NET网站开发编辑:admin      更新时间:2022-07-23

asp.net提供了网站地图提供器xmlSiteMapPRovider,使用XmlSiteMapProvider可以从XML文件中获取网站地图信息。

XmlSiteMapProvider会从根目录中寻找名为Web.sitemap的文件来读取信息,在解析Web.sitemap文件中的网站地图数据后创建一个网站地图对象,此网站地图对象能够被SiteMapDataSource使用,SiteMapDataSource可以被放置在页面上的导航控件使用,最终由导航控件把网站的导航信息显示在页面上。 

创建网站地图

使用VS创建的站点地图文件会自动生成组成网站地图的基本结构。

创建站点地图要遵循的原则

  1.网站地图以<siteMap>元素开始以</siteMap>元素结束。其他信息放在<siteMap>元素和</siteMap>元素之间。

  2.每一页由<siteMapNode>元素来描述。每一个站点地图文件定义了一个网站的页面组织结构,可以使用<siteMapNode>元素向这个组织结构插入一个页面,页面包含页面的名称、页面的描述以及URL。

  3.<siteMapNode>元素可以嵌套。一个<siteMapNode>元素表示一个页面,通过嵌套<siteMapNode>元素可以形成树型结构的页面组织结构。   

  4.每一个站点地图都是以单一的<siteMapNode>元素开始的。每一个站点地图都要包含一个根节点,其他的所有节点都包含在根节点中。

  5.不允许重复的URL。在站点地图文件中,可以没有URL,但不允许重复的URL出现,因为SiteMapProvider是以集合的形式来存储节点的,而每项是以URL为索引的。

如果想要在不同的层次引用相同的界面,需要修改URL来实现使用站点地图文件进行网站的导航。例如:

    <siteMapNode url="~/Form1.aspx?name=name1" title="主页" description="主页" />

    <siteMapNode url="~/Form2.aspx?name=name2" title="主页" description="主页" />

网站地图的使用

把站点文件绑定到页面 

  1. 确定Web.sitemap文件使用到的页面都存在于网站项目中。

  2. 在页面上添加一个SiteMapDataSource控件。

  3. 添加一个绑定到SiteMapDataSource控件的导航控件。设置导航的控件的属性DataSourceID为SiteMapDataSource控件的ID。

使用实例1

在普通页面中绑定站点文件。

新建站点地图文件Web.sitemap,代码如下:

 1 <?xml version="1.0" encoding="utf-8" ?>
 2 <siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
 3     <siteMapNode url="~/Default.aspx" title="主页"  description="网站主页">
 4       <siteMapNode title="图书" description="图书内容">
 5         <siteMapNode title="C#" description="C#图书">
 6           <siteMapNode url="~/WebForm1.aspx" title="轻松学C#" description="轻松学C#"/>
 7           <siteMapNode url="~/WebForm2.aspx" title="深入浅出C#" description="深入浅出C#"/>
 8         </siteMapNode>
 9         <siteMapNode title="C语言" description="C语言图书">
10           <siteMapNode url="~/WebForm3.aspx" title="C语言程序设计" description="C语言程序设计"/>
11           <siteMapNode url="~/WebForm4.aspx" title="C语言课程设计" description="C语言程序设计"/>
12         </siteMapNode>
13         <siteMapNode title="C++" description="C++图书" >
14           <siteMapNode url="~/WebForm5.aspx" title="C++语言程序设计" description="C++语言程序设计"/>
15           <siteMapNode url="~/WebForm6.aspx" title="C++语言课程设计" description="C++语言课程设计"/>
16         </siteMapNode>
17       </siteMapNode>
18     </siteMapNode>
19 </siteMap>
View Code

创建站点地图中使用到的页面,在Default.aspx.cs中添加SiteMapDataSource和TreeView控件,代码如下:

1 <div>
2     <asp:SiteMapDataSource ID="SiteMapDataSource1" runat="server" />
3     <asp:TreeView ID="TreeView1" runat="server"
4 DataSourceID="SiteMapDataSource1"/>
5 </div>
View Code

使用实例2

在母版页中绑定站点文件

新建站点地图文件Web.sitemap,代码如下:

 1 <?xml version="1.0" encoding="utf-8" ?>
 2 <siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
 3     <siteMapNode url="~/Default.aspx" title="主页"  description="网站主页">
 4       <siteMapNode title="图书" description="图书内容">
 5         <siteMapNode title="C#" description="C#图书">
 6           <siteMapNode url="~/WebForm1.aspx" title="轻松学C#" description="轻松学C#"/>
 7           <siteMapNode url="~/WebForm2.aspx" title="深入浅出C#" description="深入浅出C#"/>
 8         </siteMapNode>
 9         <siteMapNode title="C语言" description="C语言图书">
10           <siteMapNode url="~/WebForm3.aspx" title="C语言程序设计" description="C语言程序设计"/>
11           <siteMapNode url="~/WebForm4.aspx" title="C语言课程设计" description="C语言程序设计"/>
12         </siteMapNode>
13         <siteMapNode title="C++" description="C++图书" >
14           <siteMapNode url="~/WebForm5.aspx" title="C++语言程序设计" description="C++语言程序设计"/>
15           <siteMapNode url="~/WebForm6.aspx" title="C++语言课程设计" description="C++语言课程设计"/>
16         </siteMapNode>
17       </siteMapNode>
18     </siteMapNode>
19 </siteMap>
View Code

新建母版页,在母版页中添加如下代码:

 1 <div>
 2         <asp:SiteMapDataSource ID="SiteMapDataSource1" runat="server" />
 3         <table>
 4             <tr>
 5                 <td>
 6                     <asp:TreeView ID="TreeView1" runat="server" DataSourceID="SiteMapDataSource1"/>
 7                 </td>
 8                 <td>
 9                     <asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server" />
10                 </td>
11             </tr>
12         </table>
13 </div>
View Code

创建站点地图中使用到的页面,在页面Default.aspx中添加页面属性MasterPageFile="~/Navigation.Master",修改页面Default.aspx,代码如下:

1 <%@ Page Language="C#" MasterPageFile="~/Navigation.Master" AutoEventWireup="true" CodeBehind="WebForm2.aspx.cs" Inherits="Webapplication1.WebForm2" %>
2 
3 <asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server" />
4 <asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server"/>
View Code

使用实例3

SiteMapDataSource控件属性的应用

新建站点地图文件Web.sitemap,代码如下:

 1 <?xml version="1.0" encoding="utf-8" ?>
 2 <siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
 3     <siteMapNode url="~/Default.aspx" title="主页"  description="网站主页">
 4       <siteMapNode title="图书" description="图书内容">
 5         <siteMapNode title="C#" description="C#图书">
 6           <siteMapNode url="~/WebForm1.aspx" title="轻松学C#" description="轻松学C#"/>
 7           <siteMapNode url="~/WebForm2.aspx" title="深入浅出C#" description="深入浅出C#"/>
 8         </siteMapNode>
 9         <siteMapNode title="C语言" description="C语言图书">
10           <siteMapNode url="~/WebForm3.aspx" title="C语言程序设计" description="C语言程序设计"/>
11           <siteMapNode url="~/WebForm4.aspx" title="C语言课程设计" description="C语言程序设计"/>
12         </siteMapNode>
13         <siteMapNode title="C++" description="C++图书" >
14           <siteMapNode url="~/WebForm5.aspx" title="C++语言程序设计" description="C++语言程序设计"/>
15           <siteMapNode url="~/WebForm6.aspx" title="C++语言课程设计" description="C++语言课程设计"/>
16         </siteMapNode>
17       </siteMapNode>
18     </siteMapNode>
19 </siteMap>
View Code

新建母版页,在母版页中添加如下代码:

 1 <div>
 2         <asp:SiteMapDataSource ID="SiteMapDataSource1" runat="server" StartFromCurrentNode="true" />
 3         <asp:SiteMapDataSource ID="SiteMapDataSource2" runat="server" StartingNodeUrl="~/Form2.aspx" />
 4         <table>
 5             <tr>
 6                 <td>
 7                     <asp:Table ID="Table1" text="当前页下的页面" runat="server" />
 8                     <br />
 9                     <asp:TreeView ID="TreeView1" runat="server" DataSourceID="SiteMapDataSource1"/>
10                     <br />
11                     <asp:Table ID="Table2" text="固定页面" runat="server" />
12                     <br />
13                     <asp:TreeView ID="TreeView2" runat="server" DataSourceID="SiteMapDataSource2"/>
14                 </td>
15                 <td>
16                     <asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server" />
17                 </td>
18             </tr>
19         </table>
20 </div>
View Code

创建站点地图中使用到的页面,在页面Default.aspx中添加页面属性MasterPageFile="~/Navigation.Master",修改页面Default.aspx,代码如下:

1 <%@ Page Language="C#" MasterPageFile="~/Navigation.Master" AutoEventWireup="true" CodeBehind="WebForm3.aspx.cs" Inherits="WebApplication1.WebForm3" %>
2 
3 <asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server" />
4 <asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server" />
View Code

使用实例4

新建站点地图文件Web.sitemap,代码如下:

 1 <?xml version="1.0" encoding="utf-8" ?>
 2 <siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
 3     <siteMapNode url="~/Default.aspx" title="主页"  description="网站主页">
 4       <siteMapNode title="图书" description="图书内容">
 5         <siteMapNode title="C#" description="C#图书">
 6           <siteMapNode url="~/WebForm1.aspx" title="轻松学C#" description="轻松学C#"/>
 7           <siteMapNode url="~/WebForm2.aspx" title="深入浅出C#" description="深入浅出C#"/>
 8         </siteMapNode>
 9         <siteMapNode title="C语言" description="C语言图书">
10           <siteMapNode url="~/WebForm3.aspx" title="C语言程序设计" description="C语言程序设计"/>
11           <siteMapNode url="~/WebForm4.aspx" title="C语言课程设计" description="C语言程序设计"/>
12         </siteMapNode>
13         <siteMapNode title="C++" description="C++图书" >
14           <siteMapNode url="~/WebForm5.aspx" title="C++语言程序设计" description="C++语言程序设计"/>
15           <siteMapNode url="~/WebForm6.aspx" title="C++语言课程设计" description="C++语言课程设计"/>
16         </siteMapNode>
17       </siteMapNode>
18     </siteMapNode>
19 </siteMap>
View Code

创建站点地图中使用到的页面,在Default.aspx.cs中添加SiteMapDataSource和TreeView控件,代码如下:

1 <div>
2         <h4>当前节点</h4>
3         <asp:Label ID="Label1" runat="server" />
4         <h4>子节点</h4>
5         <asp:Label ID="Label2" runat="server" />
6         <h4>网站地图</h4>
7         <asp:SiteMapDataSource ID="SiteMapDataSource1" runat="server" />
8         <asp:TreeView ID="TreeView1" runat="server" DataSourceID="SiteMapDataSource1" />
9  </div>
View Code

在Default.aspx.cs页面中的Page_Load事件中添加如下代码:

 1             try
 2             {
 3                 string text = "";
 4                 Label1.Text = SiteMap.CurrentNode.Title;//显示当前节点的标题
 5                 if (SiteMap.CurrentNode.HasChildNodes)//判断当前节点是否存在子节点
 6                 {
 7                            foreach (SiteMapNode childNodes in
 8 SiteMap.CurrentNode.ChildNodes)
 9                         text = text + childNodes.Title + "<br/>";
10                         }
11                 Label2.Text = text;
12             }
13             catch (System.NullReferenceException ex)
14             {
15                 Label1.Text = "该节点不在网站地图中";
16             }
17             catch (Exception ex)
18             {
19                 Label1.Text = e.ToString();
20             }
View Code