一、簡介
任何由多個頁面組成的網站都需要某種導航使用者介面。一個導航使用者介面可 能象一些該網站中的到另外一些頁面的靜態超級連結一樣得簡單,或者可能包含 菜單或樹形控制項的使用。但是,在為該網站建立一個導航使用者介面之前,首先必 須定義網站的邏輯結構。(這個邏輯結構常常被參照為一個網站地圖。)例如,一 個象Amazon.com這樣的網站被組織成各個部分-其中包括產品欄如電子學書,計 算機書,DVD等等。其中的每個還可能含有子部分。書目按類型劃分,象CD,小 說,曆史書,浪漫書類,等等。典型地,這些邏輯結構形成一個分類層次。在下 面的螢幕快照顯示出Amazon.com的網站地圖的縮減版本。
一旦定義了網站地圖,就可以建立網站的導航使用者介面。在Amazon.com網站 ,首頁面在頁面左邊列出到各個分部分的超級連結。進入到一特定部分之後,在 左邊將顯示該部分的子部分資訊。然而,也可以使用另外的導航使用者介面:你可 能有一個樹來顯示各個部分和子部分,或用一個菜單作頂級功能表項目來列舉如書籍 ,電子產品,DVD,等等;而每個功能表項目的子功能表又包含各個部分的子部分。
在ASP.NET 2.0以前,開發人員典型地自己解決他們的網站導覽功能.然而, ASP.NET 2.0使得定義一網站的結構並且使用普通導航使用者介面元素實現它輕鬆 極了。在本文中,我們將分析一下ASP.NET 2.0的網站導覽特徵。
二、ASP.NET 1.x時代的網站導覽
ASP.NET 版本1.x確實沒有提供任何內建的網站導覽支援;因此,大多數開發 者實現他們自己的網站導覽功能。在建立他們自己的網站導覽功能時,開發人員面 臨兩個挑戰:
1. 決定怎樣把網站的結構資訊序列化到一張網站地圖中
2. 實現導航使用者介面元素
為解決第一個問題,開發人員們需要決定如何建模該網站的結構。要把這些信 息放置到一個XML檔案呢?還是添加一資料庫表來儲存網站的各個部分及其聯絡 方式?對於支援使用者帳戶的網站,可能有只對屬於特別角色的使用者是可存取的部 分。而且,支援多種語言的網站某種程度上都需要提供針對各個網站部分的翻譯 。
在決定需要儲存什麼資訊來描述網站的結構以及這些資訊怎樣被序列化(資料 庫?XML檔案?另外的東西?)以後,開發人員還要面對第二個挑戰-怎樣向使用者顯示這 個網站的結構。一個常用的導航使用者介面元素是菜單;然而,ASP.NET 1.x中並 沒有提供內建的菜單Web控制項-這意味著開發人員要自己花錢購買或自己構建。
讓我們總結一下,在ASP.NET版本1.x中實現網站導覽並不是多麼困難的任務 ;但是,這是必須要做的另外一個任務。而且,既然沒有網站導覽的內建支援, 每個開發人員可能會找到他自己的獨特方法,這提高了開發新手學習曲線的陡峭程 度-他們必須學習定製網站導覽邏輯。
三、ASP.NET 2.0中的網站導覽
在ASP.NET 2.0中實現網站導覽輕而易舉,這歸功於構建網站導覽特徵。內部 地,ASP.NET提供了一組可程式化API-用它可以進行網站地圖查詢。ASP.NET不需要 為指定網站地圖而提供特殊格式,儘管它確實提供了一種使用XML格式檔案的缺 省選擇。關於怎樣序列化網站地圖的細節是可以被定製的,因為ASP.NET 2.0的 網站導覽特徵使用一種提供者模型。該提供者模型使開發人員能夠定製一個特定 ASP.NET分系統的內部實現-只要它們保持向前引用的API是相同的。
簡言之,你可以使用ASP.NET 2.0的預設的基於XML的方法來指定你的網站的 網站地圖,或僅加上一點編碼,你就能使用現有的定製方法,或其它一些方法。 (本文將討論使用預設的技術(基於XML和網站地圖);本系統的後一篇文章將分析 怎樣定製網站導覽提供者。)
除了提供一種可定製的手段來指定網站結構外,隨同ASP.NET 2.0一起發行的 還有一些導航Web控制項-它們使得顯示網站地圖就象拖放一個控制項到你的ASP.NET 頁面一樣容易:
1. SiteMapPath-顯示一個breadcrumb,用於顯示終端使用者處於相對於網站結 構的具體位置。例如,在訪問Amazon.com網站的Novels部分時,一個breadcrumb 顯示可能是這個樣子:Home>Books>Novels。
2. TreeView-用一個可展開的樹顯示網站的結構。
3. Menu-使用一菜單顯示網站的結構。
4. 在顯示網站導覽時,TreeView控制項和Menu控制項都使用SiteMapDataSource 控制項來讀取網站地圖的內容。
在底層實現上,這些控制項調用了ASP.NET 2.0的網站導覽API。既然該網站導 航部分是用提供者模型來實現的,那麼,該控制項在怎樣序列化網站地圖的內部實 現原理是易於理解的。也就是說,不管你是否使用預設的網站地圖或滾動你自己 定製的網站地圖邏輯,導航控制項都可以用於同你的網站地圖一道工作。(假定, 如果你想使用一個定製的網站地圖,那麼你確實需要建立一個類-它提供所想要 的方法和屬性以與網站地圖一起工作;更細緻的討論見下一篇文章)。