共用方式為


HOW TO:篩選 SiteMapDataSource Web 伺服器控制項擷取的節點

更新:2007 年 11 月

SiteMapDataSource 控制項會從網站導覽提供者,例如 XmlSiteMapProvider (這是 ASP.NET 的預設網站導覽提供者) 擷取網站導覽資料。您可以設定 SiteMapDataSource 控制項回傳網站導覽節點的整個集合或是子集。當在頁面顯示一個以上的巡覽結構時,這個選項會很有用,每個會顯示不同區段的網站導覽。當在站台中不同的主版頁面 (Master Page) 之間散發站台巡覽項目時,這個選項也很有用,其中每個主版頁面會顯示整體網站導覽的不同部分。

若要使用這些網站巡覽控制項,您必須在 Web.sitemap 檔中描述站台的結構,並且建立網站導覽中所列出的 .aspx 檔。

若要建立 Web.sitemap 檔

  1. 在網站的根目錄中建立新檔案,然後將檔案命名為 Web.sitemap。請將下列必要程式碼置於設定檔中:

    <?xml version="1.0" encoding="utf-8" ?>
    <siteMap>
    </siteMap>
    
  2. 建立根 siteMapNode 項目做為 siteMap 項目的子項目,定義下列屬性:

    • title 指派標題給網站導覽節點,將顯示為 Web 網頁的連結文字。

    • url 指派 Web 網頁的 URL。您可以使用完整的 URL 或相對 URL,例如 ~/Default.aspx。波狀符號字元 (~) 是用來指示應用程式的根目錄。在稍後的程序中,您會建立網站導覽中所列之每個 URL 的 Web 網頁;因為如果您列出不存在的 URL (或是 URL 重複),應用程式就會失敗。您可以將這個屬性保留空白,但是為了這個範例的目的,請將其設定為能夠編輯的 .aspx 檔。

    注意事項:

    網站導覽中只能有一個根 siteMapNode 項目,但是這個根項目可以包含任意數量的子 siteMapNode 項目。

  3. 建立 siteMapNode 項目,當做根 siteMapNode 項目的子項目。設定與先前步驟相同的屬性。

  4. 建立 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>
    
  5. 儲存 Web.sitemap 檔然後關閉。

若要將網站巡覽加入至 Web 網頁

  1. 為 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>
    
  2. 儲存您的檔案。

若要變更開始節點返回巡覽控制項

  1. 在網站導覽三層深度的 .aspx 頁面中,尋找看起來如下列程式碼行的 SiteMapDataSource 控制項:

    <asp:SiteMapDataSource ID="SiteMapDataSource1" Runat="server" />
    
  2. 將上述程式碼行變更成看起來如下所示:

    <asp:SiteMapDataSource 
      ID="SiteMapDataSource1" 
      Runat="server"
      StartingNodeUrl="~/Services.aspx" />
    
  3. 儲存檔案並在瀏覽器中檢視它。

    Training.aspx 頁面中的巡覽結構與其他兩個頁面不同。結構起始於第二個節點。SiteMapPath 控制項不會受到影響,因為其包含直接來自提供者的網站導覽資料,並且不需要 SiteMapDataSource 控制項。

    下列其他選項可以變更開始節點:

    • StartFromCurrentNode 屬性設定為 true 會從目前頁面的節點開始擷取網站導覽結構。

StartingNodeOffset 屬性設定為 2 會從根節點兩層以下的節點開始擷取網站導覽結構,並且遵循路徑至目前的頁面。

若要隱藏開始節點

  1. 在網站導覽三層深度的 .aspx 頁面中,尋找看起來如下列程式碼行的 SiteMapDataSource 控制項:

    <asp:SiteMapDataSource ID="SiteMapDataSource1" Runat="server" />
    
  2. 將上述程式碼行變更成看起來如下所示:

    <asp:SiteMapDataSource ID="SiteMapDataSource1" Runat="server"
      ShowStartingNode="~/Services.aspx" />
    
  3. 儲存檔案並在瀏覽器中檢視它。

    這個頁面中的巡覽結構與其他兩個頁面不同。這跟將 StartingNodeOffset 屬性設定為 1 或是將 StartingNodeUrl 屬性設定為 ~/Services.aspx 的結果不同,因為網站導覽節點集合不會限制在整個網站導覽的一個分支上,而是也可以讓您看到「產品」節點。

    注意事項:

    如果開始節點比網站導覽的根節點還要深,您也可以將 StartingNodeOffset 屬性設定為負數。當 StartFromCurrentNode 屬性設定為 true,並且想要從目前節點的父節點顯示網站導覽時,這個選項通常就很有用。

請參閱

工作

HOW TO:自訂 SiteMapPath Web 伺服器控制項的外觀

概念

實作 ASP.NET 網站導覽提供者

ASP.NET 網站導覽安全性調整

設定 ASP.NET 網站巡覽的安全性

設定資料存取的安全性

其他資源

裝載環境中 ASP.NET 應用程式的安全性