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="主頁" descr主頁" />
<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 }
新聞熱點
疑難解答