HOW TO:篩選 SiteMapDataSource Web 伺服器控制項擷取的節點
更新:2007 年 11 月
SiteMapDataSource 控制項會從網站導覽提供者,例如 XmlSiteMapProvider (這是 ASP.NET 的預設網站導覽提供者) 擷取網站導覽資料。您可以設定 SiteMapDataSource 控制項回傳網站導覽節點的整個集合或是子集。當在頁面顯示一個以上的巡覽結構時,這個選項會很有用,每個會顯示不同區段的網站導覽。當在站台中不同的主版頁面 (Master Page) 之間散發站台巡覽項目時,這個選項也很有用,其中每個主版頁面會顯示整體網站導覽的不同部分。
若要使用這些網站巡覽控制項,您必須在 Web.sitemap 檔中描述站台的結構,並且建立網站導覽中所列出的 .aspx 檔。
若要建立 Web.sitemap 檔
在網站的根目錄中建立新檔案,然後將檔案命名為 Web.sitemap。請將下列必要程式碼置於設定檔中:
<?xml version="1.0" encoding="utf-8" ?> <siteMap> </siteMap>
建立根 siteMapNode 項目做為 siteMap 項目的子項目,定義下列屬性:
title 指派標題給網站導覽節點,將顯示為 Web 網頁的連結文字。
url 指派 Web 網頁的 URL。您可以使用完整的 URL 或相對 URL,例如 ~/Default.aspx。波狀符號字元 (~) 是用來指示應用程式的根目錄。在稍後的程序中,您會建立網站導覽中所列之每個 URL 的 Web 網頁;因為如果您列出不存在的 URL (或是 URL 重複),應用程式就會失敗。您可以將這個屬性保留空白,但是為了這個範例的目的,請將其設定為能夠編輯的 .aspx 檔。
注意事項: 網站導覽中只能有一個根 siteMapNode 項目,但是這個根項目可以包含任意數量的子 siteMapNode 項目。
建立 siteMapNode 項目,當做根 siteMapNode 項目的子項目。設定與先前步驟相同的屬性。
建立 siteMapNode 項目,當做先前 siteMapNode 項目的子項目。設定與先前步驟相同的屬性。為了這個範例的目的,網站導覽必須擁有三層 siteMapNode 項目。
Web.sitemap 檔會類似下列範例:
<?xml version="1.0" encoding="utf-8" ?> <siteMap> <siteMapNode title="Home" url="~/Default.aspx" roles="*"> <siteMapNode title="Services" url="~/Services.aspx " > <siteMapNode title="Training" url="~/Training.aspx" /> </siteMapNode> <siteMapNode title="Products" url="" /> </siteMapNode> </siteMap>
儲存 Web.sitemap 檔然後關閉。
若要將網站巡覽加入至 Web 網頁
為 Web.sitemap 檔的 url 屬性中所列的每個檔案建立 .aspx 頁面。在每個 .aspx 檔案中使用下列範例取代程式碼,以便在顯示網站導覽資料的各種控制項中顯示網站導覽。如果 .aspx 檔案不在網站導覽的清單中,就無法顯示站台巡覽控制項。
<%@ Page Language="VB" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <script > </script> <html xmlns="http://www.w3.org/1999/xhtml" > <head id="Head1" > <title>Simple Navigation Controls</title> </head> <body> <form id="form1" > <div> <h2>Using SiteMapPath</h2> <asp:SiteMapPath ID="SiteMapPath1" Runat="server"> </asp:SiteMapPath> <asp:SiteMapDataSource ID="SiteMapDataSource1" Runat="server" /> <h2>Using TreeView</h2> <asp:TreeView ID="TreeView1" Runat="Server" DataSourceID="SiteMapDataSource1"> </asp:TreeView> <h2>Using Menu</h2> <asp:Menu ID="Menu2" Runat="server" DataSourceID="SiteMapDataSource1"> </asp:Menu> <h2>Using a Horizontal Menu</h2> <asp:Menu ID="Menu1" Runat="server" DataSourceID="SiteMapDataSource1" Orientation="Horizontal" StaticDisplayLevels="2" > </asp:Menu> </div> </form> </body> </html>
<%@ Page Language="C#" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <script > </script> <html xmlns="http://www.w3.org/1999/xhtml" > <head > <title>Simple Navigation Controls</title> </head> <body> <form id="form1" > <div> <h2>Using SiteMapPath</h2> <asp:SiteMapPath ID="SiteMapPath1" Runat="server"> </asp:SiteMapPath> <asp:SiteMapDataSource ID="SiteMapDataSource1" Runat="server" /> <h2>Using TreeView</h2> <asp:TreeView ID="TreeView1" Runat="Server" DataSourceID="SiteMapDataSource1"> </asp:TreeView> <h2>Using Menu</h2> <asp:Menu ID="Menu2" Runat="server" DataSourceID="SiteMapDataSource1"> </asp:Menu> <h2>Using a Horizontal Menu</h2> <asp:Menu ID="Menu1" Runat="server" DataSourceID="SiteMapDataSource1" Orientation="Horizontal" StaticDisplayLevels="2" > </asp:Menu> </div> </form> </body> </html>
儲存您的檔案。
若要變更開始節點返回巡覽控制項
在網站導覽三層深度的 .aspx 頁面中,尋找看起來如下列程式碼行的 SiteMapDataSource 控制項:
<asp:SiteMapDataSource ID="SiteMapDataSource1" Runat="server" />
將上述程式碼行變更成看起來如下所示:
<asp:SiteMapDataSource ID="SiteMapDataSource1" Runat="server" StartingNodeUrl="~/Services.aspx" />
儲存檔案並在瀏覽器中檢視它。
Training.aspx 頁面中的巡覽結構與其他兩個頁面不同。結構起始於第二個節點。SiteMapPath 控制項不會受到影響,因為其包含直接來自提供者的網站導覽資料,並且不需要 SiteMapDataSource 控制項。
下列其他選項可以變更開始節點:
- 將 StartFromCurrentNode 屬性設定為 true 會從目前頁面的節點開始擷取網站導覽結構。
將 StartingNodeOffset 屬性設定為 2 會從根節點兩層以下的節點開始擷取網站導覽結構,並且遵循路徑至目前的頁面。
若要隱藏開始節點
在網站導覽三層深度的 .aspx 頁面中,尋找看起來如下列程式碼行的 SiteMapDataSource 控制項:
<asp:SiteMapDataSource ID="SiteMapDataSource1" Runat="server" />
將上述程式碼行變更成看起來如下所示:
<asp:SiteMapDataSource ID="SiteMapDataSource1" Runat="server" ShowStartingNode="~/Services.aspx" />
儲存檔案並在瀏覽器中檢視它。
這個頁面中的巡覽結構與其他兩個頁面不同。這跟將 StartingNodeOffset 屬性設定為 1 或是將 StartingNodeUrl 屬性設定為 ~/Services.aspx 的結果不同,因為網站導覽節點集合不會限制在整個網站導覽的一個分支上,而是也可以讓您看到「產品」節點。
注意事項: 如果開始節點比網站導覽的根節點還要深,您也可以將 StartingNodeOffset 屬性設定為負數。當 StartFromCurrentNode 屬性設定為 true,並且想要從目前節點的父節點顯示網站導覽時,這個選項通常就很有用。
請參閱
工作
HOW TO:自訂 SiteMapPath Web 伺服器控制項的外觀