網站地圖

ASP.NET提供了網站地圖提供器XmlSiteMapProvider,使用XmlSiteMapProvider能夠從XML文件中獲取網站地圖信息。ide

XmlSiteMapProvider會從根目錄中尋找名爲Web.sitemap的文件來讀取信息,在解析Web.sitemap文件中的網站地圖數據後建立一個網站地圖對象,此網站地圖對象可以被SiteMapDataSource使用,SiteMapDataSource能夠被放置在頁面上的導航控件使用,最終由導航控件把網站的導航信息顯示在頁面上。 網站

建立網站地圖url

使用VS建立的站點地圖文件會自動生成組成網站地圖的基本結構。spa

建立站點地圖要遵循的原則設計

  1.網站地圖以<siteMap>元素開始以</siteMap>元素結束。其餘信息放在<siteMap>元素和</siteMap>元素之間。code

  2.每一頁由<siteMapNode>元素來描述。每個站點地圖文件定義了一個網站的頁面組織結構,能夠使用<siteMapNode>元素向這個組織結構插入一個頁面,頁面包含頁面的名稱、頁面的描述以及URLorm

  3.<siteMapNode>元素能夠嵌套。一個<siteMapNode>元素表示一個頁面,經過嵌套<siteMapNode>元素能夠造成樹型結構的頁面組織結構。   server

  4.每個站點地圖都是以單一的<siteMapNode>元素開始的。每個站點地圖都要包含一個根節點,其餘的全部節點都包含在根節點中。xml

  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控件的導航控件。設置導航的控件的屬性DataSourceIDSiteMapDataSource控件的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
相關文章
相關標籤/搜索