剖析ASP.NET2.0站點導航功能之建立導航

    一、 簡介

  任何由多個頁面組成的網站都需要某種導航用戶接口。一個導航用戶接口可能象一些該站點中的到另外一些頁面的靜態超級鏈接一樣得簡單,或者可能包含菜單或樹形控件的使用。但是,在爲該站點創建一個導航用戶接口之前,首先必須定義站點的邏輯結構。(這個邏輯結構常常被參照爲一個站點地圖。)例如,一個象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。既然該站點導航部分是用提供者模型來實現的,那麼,該控件在怎樣串行化站點地圖的內部實現原理是易於理解的。也就是說,不管你是否使用缺省的站點地圖或滾動你自己定製的站點地圖邏輯,導航控件都可以用於同你的站點地圖一道工作。(假定,如果你想使用一個定製的站點地圖,那麼你確實需要創建一個類-它提供所想要的方法和屬性以與站點地圖一起工作;更細緻的討論見下一篇文章)。

   四、 定義站點地圖

  一張站點地圖由一系列相聯繫的SiteMapNode對象組成。這些SiteMapNode以一種層次方式(在本文的開始已說明)聯繫在一起。該層次包含單個根結點-它是該層中唯一的一個沒有父結點的結點。在該層上的每個結點代表網站的一個邏輯部分。每一部分都有一個標題,URL,描述等-它用SiteMapNodes類的屬性(Title,Url,Description等)建模。

  這些SiteMapNode對象的層次正說明了站點地圖是怎樣在內存中描述的-當通過ASP.NET 2.0的站點導航API對它進行分析時。然而,這個站點地圖必須被以某種方式進行物理地串行化-如通過一個XML文件或通過一個數據庫表。默認地,ASP.NET 2.0使用一個XML格式的文件以提供一個缺省的實現來串行化該站點地圖。爲使用這種技術,你需要在你的web應用程序的根目錄Web.sitemap下創建一個XML文件-它具有下列結構:

<?xml version="1.0" encoding="utf-8" ?>
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0">
 <siteMapNode attributes>
 <siteMapNode attributes>
 <siteMapNode attributes>
 ...
</siteMapNode>
<siteMapNode attributes />
 ...
<siteMapNode attributes />
</siteMapNode>
</siteMap>

  提示:關於創建Web.sitemap文件

  利用Visual Studio 2005,你能容易地創建這個站點地圖文件-這是通過在解決方案資源管理器的該網站上單擊鼠標右鍵並選擇"Add New Item",然後選擇該站點地圖圖標來實現的。請確保文件名爲Web.sitemap。新建的文件有幾個<siteMapNode>XML元素-類似於上面的XML片斷。

  <siteMapNode>元素可以有多個屬性,最常用的有:

  1. title-指定這個節的標題。

  2. url-指定某個部分的URL;是可選的,但是如果提供的話,站點地圖中的每一個URL必須是唯一的。

  3. description-這部分的可選描述;用在生成的導航控件的alt屬性中。

  <siteMapNode>元素可以嵌套到任何深度;然而,站點地圖必須包含一根<siteMapNode>元素。也就是說,<siteMap>結點必須有且只有一個<siteMapNode>元素子結點。

  下列的站點地圖文件顯示出簡單部分中所說Amazon.com示例的站點結構(根據本文最後所提供的內容,你可以把這個文件以及一個完整的能夠進行站點導航的ASP.NET 2.0網站裝載到你的計算機上去)。

<?xml version="1.0" encoding="utf-8" ?>
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
 <siteMapNode url="~/default.aspx" title="Home">
 <siteMapNode url="~/Books/default.aspx" title="Books">
 <siteMapNode url="~/Books/Novels.aspx" title="Novels" />
 <siteMapNode url="~/Books/History.aspx" title="History" />
 <siteMapNode url="~/Books/Romance.aspx" title="Romance" />
</siteMapNode>
<siteMapNode url="~/Electronics/default.aspx" title="Electronics" />
<siteMapNode url="~/DVDs/default.aspx" title="DVDs" />
<siteMapNode url="~/Computers/default.aspx" title="Computers" />
</siteMapNode>
</siteMap>

   五、 使用導航Web控件顯示站點地圖

  現在,既然我們已經定義了一個站點地圖,下面我們將要通過一個ASP.NET頁面來顯示該站點地圖的數據。如前面所提的,共有三個內置的導航Web控件-SiteMapPath,TreeView和Menu。使用這些控制是簡單的-只需把它們拖動到該ASP.NET頁面並且設置屬性以調整控件的外觀以適合你的站點的外觀需要。

  爲此,我們將爲該網站創建一個主頁面。正如在《A Sneak Peak at Master Pages in ASP.NET 2.0》中所討論的,主頁面一般提供一個容易的方法來定義整個站點範圍的模板。既然導航用戶接口元素普遍出現在一個站點的每個頁面上,那麼主頁面常常就是一個來放置校驗Web控件的理想位置。具體地說,我的主頁面包含一個有下面三部分的表格:

  1. 一個表頭-這裏顯示站點的標題("歡迎來到我的網站!")

  2. 一個左邊部分-這裏是一個控件TreeView-它負責列出站點地圖的完整內容。這允許參觀者快速跳轉到站點的特定部分。

  3. 一個主部分-這一部分包含相對於每個頁面的唯一的內容-它們共同構成整個主頁面(注意,在這一部分中的ContentPlaceHolder控件)。另外,在這一部分的頂部還包括了一個控件SiteMapPath-它用於向用戶提供一個breadcrumb,來向他們指示其當前位於站點結構的具體位置。

  爲把SiteMapPath控件添加到主部分上,我簡單地從工具箱拖放SiteMapPath控件到主頁面上。當添加一個TreeView控件(或菜單)時,首先你需要添加一SiteMapDataSource控件到該頁面;然後,添加TreeView(或菜單)並且設置它的DataSourceID屬性爲SiteMapDataSource控件的ID(這可以使用TreeView控件的靈敏標籤來實現)。SiteMapDataSource控件實現通過站點導航API查詢站點地圖並且把完整的站點地圖結構提供給TreeView(或菜單)控件。

  下列屏幕快照顯示當通過一個瀏覽器來訪問時的該網站。注意,左邊的TreeView控件列出站點地圖的完整內容。點擊TreeView控件中的任何一個結點將快速地把用戶引導到適當的部分。頂部的SiteMapPath控件向用戶指示他們在該站點層次的位置(也即,Home>Books>Novels)。




   六、 結論

  本文是探討ASP.NET 2.0的站點導航功能系列文章的第一篇。在這一篇文章中,我們分析了站點導航的基礎,它包含兩步:使用一個站點地圖來定義站點的結構和通過使用導航控件來實現站點地圖。幸好,ASP.NET 2.0使得所有這些處理甚是簡單。

  在我們分析了站點地圖基礎的同時,我們還探討了一些更高級的功能。例如,通過使用ASP.NET 2.0的角色特徵,你可以限制該站點的某些部分,這樣顯示在導航控件中的部分就依賴於訪問用戶的角色和爲該站點地圖文件中的這一部分所定義的角色。另外,該站點地圖還包括支持地方化和屬性-這樣可以很容易地實現讓你的站點中的每一頁的標題和描述輕易地支持每種語言。所有這些以及分析怎樣創建一個定製的站點導航提供者,都是我們在後面的文章中所要討論的。
發佈了35 篇原創文章 · 獲贊 2 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章