這幾天閑來無事,就在園子裡找前輩們關於ASP.NET網站導覽的東西,找了好半天,不過頗有收穫,呵呵!但是我想先把我自己看到的關於ASP.NET網站導覽控制項的知識摘抄下來,以備後用:
您可以使用 ASP.NET 網站導覽功能為使用者導航網站提供一致的方法。隨著網站內容的增加以及您在網站內來回移動網頁,管理所有的連結可能會變得比較困難。ASP.NET 網站導覽使您能夠將指向所有頁面的連結儲存在一個中央位置,並在列表中呈現這些連結,或用一個特定 Web 伺服器控制項在每頁上呈現導覽功能表。
若要為網站建立一致的、容易管理的導航解決方案,可以使用 ASP.NET 網站導覽。ASP.NET 網站導覽提供下列功能:
網站地圖 您可以使用網站地圖描述網站的邏輯結構。接著,可通過在添加或移除頁面時修改網站地圖(而不是修改所有網頁的超連結)來管理頁導航。
ASP.NET 控制項 您可以使用 ASP.NET 控制項在網頁上顯示導覽功能表。導覽功能表以網站地圖為基礎。
編程式控制件 您可以以代碼方式使用 ASP.NET 網站導覽,以建立自訂導航控制項或修改在導覽功能表中顯示的資訊的位置。
訪問規則 您可以配置用於在導覽功能表中顯示或隱藏連結的訪問規則。
自訂網站地圖提供者 您可以建立自訂網站地圖提供者,以便使用自己的網站地圖後端(如儲存連結資訊的資料庫),並將提供者插入到 ASP.NET 網站導覽系統。
網站導覽如何工作
通過 ASP.NET 網站導覽,可以按階層描述網站的布局。例如,一家虛擬線上電腦商店的網站共有八頁,其布局如下。
Home
Products
Hardware
Software
Services
Training
Consulting
Support
若要使用網站導覽,請先建立一個網站地圖或網站的表示形式。您可以用 XML 檔案描述網站的階層,但也可以使用其他方法。有關更多資訊及樣本,請參見 ASP.NET 網站地圖。
在建立網站地圖後,可以使用網站導覽控制項在 ASP.NET 頁上顯示導航結構。有關樣本,請參見如何:添加簡單的網站導覽。
網站地圖載入進程
預設的 ASP.NET 網站地圖提供者會載入網站地圖資料作為 XML 文檔,並在應用程式啟動時將其作為待用資料進行緩衝。超大型網站地圖檔在載入時可能要佔用大量的記憶體和 CPU 資源。ASP.NET 網站導覽功能根據檔案通知來使導航資料保持為最新的。更改網站地圖檔時,ASP.NET 會重新載入網站地圖資料。請確保將所有病毒掃描軟體配置為不會修改網站地圖檔。有關更多資訊,請參見保證 ASP.NET 網站導覽的安全。
網站導覽控制項
建立一個反映網站結構的網站地圖只完成了 ASP.NET 網站導覽系統的一部分。導航系統的另一部分是在 ASP.NET 網頁中顯示導航結構,這樣使用者就可以在網站內輕鬆地移動。通過使用下列 ASP.NET 網站導覽控制項,您可以輕鬆地在頁面中建立導航資訊:
此控制項顯示導航路徑(也稱為麵包屑或眉毛連結)向使用者顯示當前頁面的位置,並以連結的形式顯示返回首頁的路徑。此控制項提供了許多可供自訂連結的外觀的選項。
此控制項顯示一個樹狀結構或菜單,讓使用者可以遍曆訪問網站中的不同頁面。單擊包含子節點的節點可將其展開或摺疊。
此控制項顯示一個可展開的菜單,讓使用者可以遍曆訪問網站中的不同頁面。將游標懸停在菜單上時,將展開包含子節點的節點。
如果在上述樣本中將 控制項添加到線上電腦商店的“Training”(培訓)頁中, 控制項將顯示如下內容,其中“Home”(首頁)和“Services”(服務)呈現為超連結的形式:
首頁 > 服務 > 培訓
您可以使用 控制項建立網站導覽,既不用編寫代碼,也不用顯式綁定資料。此控制項可自動讀取和呈現網站地圖資訊。但是,如果需要,也可以使用代碼自訂 控制項。有關樣本,請參見如何:以編程方式修改記憶體中的網站地圖節點。
控制項使使用者能夠從當前頁導航回網站階層中較高的頁。但是, 控制項不允許從當前頁向前置航到階層中較深的其他頁面。在新聞群組或留言板應用程式中,當使用者想要查看他們正在瀏覽的文章的路徑時,就可以使用 控制項。
通過 或 控制項,使用者可以開啟節點並直接導航到特定的頁。這些控制項不會像 控制項那樣直接讀取網站地圖。相反,您需要在頁上添加一個可讀取網站地圖的 控制項。然後,將 或 控制項綁定到 控制項,從而將網站地圖呈現在該頁上。 控制項將顯示如下的類似內容:
- Home
- Services
+ 培訓
注意:
在網站中的所有頁上顯示、 或 控制項有一個簡便方法,就是先建立一個主版頁面,然後將這些控制項添加到該頁上。有關更多資訊,請參見 ASP.NET 主版頁面概述。
網站導覽 API
通過導航控制項,您只需編寫極少的代碼甚至不需要代碼,就可以在頁面中添加網站導覽;不過您也能以編程的方式處理網站導覽。當 Web 應用程式運行時,ASP.NET 公開一個反映網站地圖結構的 對象。 對象的所有成員均為靜態成員。而 對象會公開 對象的集合,這些對象包含地圖中每個節點的屬性。(在使用 控制項時,該控制項會使用 和 對象自動呈現相應的連結。
SiteMapNode 對象表示網站地圖結構中的一個網站頁面。SiteMapNode 對象由靜態 SiteMap 類使用一個或多個網站地圖提供者在運行時載入,從而將網站地圖資料從永久儲存區載入到記憶體中。SiteMapNode 對象由 SiteMapNodeItem 類封裝以供 Web 伺服器控制項(如 SiteMapPath 控制項)使用。
SiteMapNode 類包括幾個用於描述網站中單個頁(包括某一頁)的屬性,如 Url、Title 和 Description 屬性; 而 Url 屬性由作為 ASP.NET 預設網站地圖提供者的 XmlSiteMapProvider 類使用,該類將這一屬性作為內部集合的尋找鍵,提供者用這個尋找鍵來跟蹤節點。SiteMapNode 類支援一個基本的 Key 屬性,網站地圖提供者使用該屬性來跟蹤節點。此外,Url 屬性還由導航控制項使用,以便呈現導航結構中頁面的超連結。Title 屬性是 SiteMapNode 的易記名稱,通常與 Web Form的 HTML 標題相同,並由導航控制項用於呈現簡單的標籤。最後,附加 Attributes 屬性的 集合可供某些網站地圖提供者使用,這些提供者使用 SiteMapNode 對象,但需要 SiteMapNode 基類中未提供的附加屬性。
您可以在自己的代碼中使用、 和 對象來遍曆網站地圖結構,或建立自訂的控制項來顯示網站地圖資料。您不能向網站地圖進行寫入,但可以在對象的執行個體中修改網站地圖節點。有關更多資訊,請參見如何:以編程方式修改記憶體中的網站地圖節點或如何:以編程方式枚舉網站地圖節點。
即需填充 TreeNode 資料
靜態定義資料結構有時是不可行的,或者資料可能會依賴運行時收集的資訊。為了動態顯示資料, 控制項支援動態節點填充。將 控制項配置為即需填充時,該控制項將在使用者展開節點時引發事件。事件處理常式檢索相應資料,然後填充到使用者單擊的節點。若要以資料即需填充 對象,請將節點的 屬性設定為 true,並建立 事件處理常式以向 對象中填充資料。
用戶端 TreeView 節點填充
任何在瀏覽器功能設定檔中將 屬性設定為 true 的瀏覽器都支援用戶端節點填充。
藉助用戶端節點填充, 控制項可以通過從用戶端指令碼中調用伺服器的 事件來填充節點,而無需完全回傳至伺服器。有關用戶端節點填充的更多資訊,請參見。
啟用用戶端指令碼
預設情況下,在進階 (Up-level) 瀏覽器中, 控制項上的節點的展開 - 摺疊功能是使用用戶端指令碼執行的。由於控制項不需要回傳至伺服器來呈現新配置,所以使用用戶端指令碼可以提高呈現的效率。
注意:
如果瀏覽器中的用戶端指令碼被禁用或瀏覽器不支援用戶端指令碼,則 控制項將恢複到低級(Down-level)模式並在每次使用者單擊節點時回傳到伺服器。
TreeView 回傳
預設情況下,除非瀏覽器不支援用戶端指令碼或者 屬性被設定為 false,否則 控制項將在用戶端處理展開 - 摺疊功能。如果 屬性被設定為 true 並且瀏覽器支援用戶端指令碼,那麼 控制項將從伺服器檢索資料,而不回傳整頁。
當 控制項處於選擇模式時,每次使用者單擊節點時都將回傳到伺服器並引發 事件。
通常,您應該在 控制項處於選擇模式或正在動態填充節點時處理回傳事件。原因是 或 屬性已設定為 true。
將 TreeView 控制項與 UpdatePanel 控制項一起使用
控制項用於通過回傳更新頁面的選定地區,而不是更新整個頁面。可在 控制項內使用 控制項,但具有以下限制:
回調必須與非同步回傳關聯,否則回調事件驗證將會失敗。在將 控制項的 屬性設定為 true 時,即啟用了回調。可以使用以下方法之一來確保 回調對 控制項起作用:
必須使用對階層式樣式表 (CSS) 類的引用來應用樣式。例如,使用屬性-CssClass(其中屬性指 Property)屬性 (Attribute) 來設定樣式,而不是使用屬性-子屬性(其中屬性指 Property)屬性 (Attribute) 設定 屬性 (Property)。同樣,在使用 模板設定樣式時,請使用模板的 CssClass 屬性 (Attribute)。
屬性必須為 true(預設值)。此外,如果對 控制項啟用了回調,則不能在非同步回傳之間更改 屬性。
有關使用 控制項的更多資訊,請參見 UpdatePanel 控制項概述和部分頁呈現概述。
網站導覽組件之間的關係
下面的示範了各個 ASP.NET 網站導覽組件之間的關係。
抄自MSDN