實作 ASP.NET 網站導覽提供者
更新:2007 年 11 月
ASP.NET 站台巡覽提供幾種會在 Web 網頁上顯示巡覽結構的 Web 伺服器控制項:SiteMapPath、TreeView 和 Menu 控制項。這些 Web 伺服器控制項使用 ASP.NET 預設網站導覽提供者,或 XmlSiteMapProvider 類別,從 XML 格式的 Web.sitemap 檔讀取網站導覽資訊。
您也可以實作一個自己的網站導覽提供者。建立一個自訂網站導覽提供者的三個主要原因如下:
在 ASP.NET 預設網站導覽提供者不支援的資料來源中,儲存網站導覽資訊。例如,您可能希望將網站導覽資料儲存在 Visual FoxPro 資料庫、Oracle 資料庫或其他資料來源。
使用與 Web.sitemap 檔案不同的結構描述來管理巡覽資訊。例如,您可能已經有存放網站導覽資料的實作。
使用動態網站導覽結構。例如,您可能希望讓每個用戶端帳戶能夠檢視不同的網站導覽。
安全性注意事項: |
---|
如果自訂的網站導覽提供者將網站導覽資料儲存在副檔名不是 .sitemap 的檔案,則實作這樣的提供者可能有安全性風險。根據預設,ASP.NET 會設定為保護具有已知副檔名 (如 .sitemap) 的檔案,使用戶端無法下載這類檔案。若要協助保護您的資料,請將任何副檔名不是 .sitemap 的自訂網站導覽資料檔置於 App_Data 資料夾中。如需詳細資訊,請參閱設定 ASP.NET 網站巡覽的安全性。 |
必要的類別
若要實作網站導覽提供者,請建立繼承自 System.Web 命名空間之 SiteMapProvider 抽象類別的類別,然後實作由 SiteMapProvider 類別所公開的抽象成員。本主題說明對您必須從 SiteMapProvider 抽象類別實作的必要屬性和方法加以描述。若要檢視每個成員的實作,請參閱 HOW TO:實作 ASP.NET 網站導覽提供者,以取得 Microsoft Access 和文字網站導覽提供者所提供的範例程式碼。
注意事項: |
---|
SiteMapProvider 類別會在網站導覽資料結構上強制一項條件約束:只能存在一個根節點。預設 ASP.NET 網站導覽提供者的實作,也會指定在提供者範圍內的 URL 必須是唯一的,但是自訂網站導覽提供者則沒有這項限制。 |
必要的 SiteMapProvider 成員
下表只列出實作網站導覽提供者必要的方法。SiteMapProvider 基底類別提供最少的實作。
方法 |
說明 |
---|---|
擷取表示頁面的 SiteMapNode 類別執行個體。這個方法是多載的。 |
|
擷取 SiteMapNode 類別特定執行個體的子節點。 |
|
擷取 SiteMapNode 類別特定執行個體的父節點。 |
|
擷取由目前提供者管理之所有節點的根節點。各種站台巡覽類別會在內部呼叫這個方法,以確定提供者已經載入巡覽資料。這個方法不能傳回 null 節點。 |
如果您滿足 XmlSiteMapProvider 類別的語意,但是希望使用與 Web.sitemap 檔不同的資料存放區,您應該衍生自 StaticSiteMapProvider 類別而不是 SiteMapProvider 類別。除非實作它們,否則有些方法 (如 AddNode 和 RemoveNode) 會擲回 NotImplementedException。StaticSiteMapProvider 類別會提供所有內部邏輯,存放和搜尋節點;您只需要實作 GetRootNodeCore 方法和抽象 BuildSiteMap 方法。GetRootNodeCore 方法僅呼叫 BuildSiteMap 方法。
自訂成員
您可能需要使用 SiteMapProvider 抽象類別並未提供的額外功能,以擴展網站導覽提供者介面。如果將自訂提供者設定為預設提供者,並且將 Provider 的傳回值轉換成自訂提供者類型,則可以使用 SiteMap 類別的 Provider 屬性,存取加入至網站導覽提供者的任何公用成員。