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>元素向這個組織結構插入一個頁面,頁面包含頁面的名稱、頁面的描述以及URL。orm
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控件的導航控件。設置導航的控件的屬性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>
建立站點地圖中使用到的頁面,在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>
使用實例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>
新建母版頁,在母版頁中添加以下代碼:
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>
建立站點地圖中使用到的頁面,在頁面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"/>
使用實例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>
新建母版頁,在母版頁中添加以下代碼:
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>
建立站點地圖中使用到的頁面,在頁面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" />
使用實例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>
建立站點地圖中使用到的頁面,在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>
在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 }