http://www.oread.cn/user1/cdbookcn/archives/2006/2006912184115.html
2. SiteMapPath控件的屬性
在前面的“試一試”練習中,添加了一個SiteMapPath控件,沒有進行任何修改該控件就可以顯示Web.SiteMap文件中列出的節點。如果希望修改它以限制顯示的層次數,就可以以不同的方式使用該控件;例如,可以將當前頁面的名稱顯示為一個標題:
<asp:SiteMapPath ID="PageTitle" Runat="server" ParentLevelsDisplayed="
0">
</asp:SiteMapPath>
因此,在進行以上修改之后,站點地圖節點將只顯示當前頁面的名稱;以History.aspx頁面為例,SiteMapNode控件將只顯示History。
另一個可以修改的內容是修改路徑分隔符字符,例如:
<asp:SiteMapPath ID="crumbs" runat="server" PathSeparator=" : ">
</asp:SiteMapPath>
如果再次導航到History.aspx頁面,用戶將看到以下內容:
Home : About : History
除了這兩個屬性之外,開發人員還可以設置其他很多屬性以定制這個控件。表3-2列出了其中一些屬性。
表? 3-2
屬??? 性 | 說??? 明 | 選項(粗體表示默認值) |
RenderCurrentNodeAsLink | 指定是否可以單擊活動節點,或者是否以普通文本顯示當前節點 | True/False |
PathDirection | 設置節點出現的順序是由根節點到當前節點(從左到右)還是反過來 | RootToCurrent/CurrentToRoot |
PathSeparator | 設置所使用的節點之間的分隔符 | >,任意ASCII字符 |
?
?
在學習了SiteMapPath控件的工作原理之后,我們將繼續學習其他兩個導航控件:Menu控件和TreeView控件。經典凱美瑞2.0怎么樣,然而,要在頁面上使用這兩個控件,需要添加一個不同類型的控件為它們提供數據;該控件是SiteMapDataSource。
3. SiteMapDataSource控件
這個控件是非可視的控件,它用于以一種Menu和TreeView控件能夠理解的方式處理定義在Web.SiteMap文件中的節點,從而可以修改這些控件將要顯示的內容。
要在站點中添加這個控件,只需拖動一個副本到頁面上。這就是所有的操作。VWD產生的代碼在Source View中如下所示:
<asp:SiteMapDataSource ID="SiteMapDataSource1" runat="server" />
在下一個“試一試”練習中,將自行添加這個控件以便可以使用Menu控件。NETframework。Menu控件用于為Wrox United站點提供導航的功能,從而不必輸入鏈接;讓我們看一看這是怎樣和SiteMapDataSource控件聯系在一起的。
4. Menu控件
Menu控件提供靜態和動態混合的菜單功能。在向頁面添加這個控件的時候,開發人員可以選擇將它設置為一個完全動態的菜單,以便整個站點的導航結構都可以顯示在菜單中,類似于Windows的Start菜單。另一種選擇是,可以采取一種更傳統的方法,可使用固定菜單,或者使用混合這兩種功能的方法。動態菜單使用由ASP.NET產生的客戶端JavaScript代碼(同樣,不需要開發人員輸入任何代碼)。javaweb中間件,
為了向站點添加Menu控件,首先必須添加SiteMapDataSource控件,這個控件指定了菜單可以顯示的鏈接以及這些鏈接出現的順序。在下面的“試一試”中,將在一個基于WroxUnited應用程序的示例中添加這兩個控件。
(1) 打開Site.Master文件并切換到Design View。將光標放在頁面左邊的nav div中,如圖3-37所示。
(2) 在將一個SiteMapDataSource控件(圖3-38和3-39都高亮顯示這個控件)拖放到nav div內的頁面上(該控件位于工具箱的Data面板上),并在屬性窗口中將該控件命名為siteData。ASP 第三方控件?
所有的鋪墊工作已經完成—— 接下來,將添加Menu控件本身。
圖? 3-37
圖? 3-38
(3) 將Menu控件拖放到緊靠SiteMapDataSource控件右邊緣的地方。您將看到一個彈出的對話框,如圖3-39所示—— 這是Smart Tasks窗口。
在這個對話框中,選擇在第3步中創建的siteData數據源。在完成該設置之后,菜單將變為如圖3-40所示。PHP中間件,
圖? 3-39
圖? 3-40
(4) 單擊菜單右上角的小箭頭關閉該菜單。現在,選中Menu控件并在屬性窗口中將它的StaticDisplayLevels屬性設置為2。您將會立即看到變化,如圖3-41所示。
(5) 在該控件能以在完整版本的Wrox United站點中的方式工作之前,需要設置它的一些屬性值。切換到Source View并在代碼中添加如下屬性:
<asp:Menu ID="Menu1" runat="server" DataSourceID="siteData"
StaticDisplayLevels="2"
orientation="Vertical"
StaticSubMenuIndent="0"
disappearafter="200"
AccessKey="m"
EnableViewState="false">
<DynamicMenuStyle CssClass="dynamicMenu" />
<DynamicMenuItemStyle CssClass="dynamicMenuItem" />
</asp:Menu>
圖? 3-41
(6) 現在再次運行站點(按下Ctrl+F5不帶調試功能啟動站點),將看到如圖3-42所示的畫面。JSP頁面,
圖? 3-42
注意可以將鼠標光標停留在About鏈接上,片刻之后一個包括History頁面的子菜單將顯示出來。這就是動態菜單的最佳形式—— 很不錯吧!
操作回顧
添加到Master頁面的Menu控件將讀取SiteMapDataSource控件(siteData)的內容并根據保存在該數據源中的數據顯示一組鏈接。SiteMapDataSource控件本身不需要任何修改(除了重新命名以外)—— 默認情況下,SiteMapDataSource將讀取Web.SiteMap文件并扮演Menu控件的中間人,以使它能夠根據Web.SiteMap文件的內容顯示鏈接。
如果需要,可以使用表3-3所示的屬性定制SiteMapDataSource。
表? 3-3
屬??? 性 | 值 | 結??? 果 |
EnableViewSatae | True/False | 指定SiteMapDataSource控件在回傳(postback)的時候是否保留數據 |
ShowStartingNode | True/False | 指定在依賴于該數據源的控件上是否顯示根節點 |
SiteMapProvider | 任何合法的提供程序 | 可用于指定一個自定義數據提供程序(例如,如果站點地圖數據存儲在一個完全不同的結構之中,如.csv文件或數據庫,而不是Web.SiteMap文件中,那么就必須設置這個屬性) |
StartFromCurrentNode | True/False | 如果設置為true,那么只有當前節點(活動頁面)的子鏈接而不是整個層次結構會顯示出來 |
StartingNodeOffset | 整數值 | 用于指定從哪個層次結構開始顯示。2.0、如果希望Menu控件只顯示子鏈接,而不是整個站點的完整結構,那么這個屬性會有用。如果在Wrox United站點中將該屬性的值設置為1,那么菜單將忽略第一級菜單項,而只顯示下面的一個層次結構,因此,在Wrox United的層次結構中,這將顯示Future and Past Fixtures、History、News以及類似的鏈接 |
StartingNodeUrl | 在Web.SiteMap文件中定義的表示頁面URL的字符串 | 用于指定一個啟動層次結構的不同位置。 |
?
將菜單綁定到SiteMapDataSource控件是從Web.SiteMap數據文件創建鏈接層次結構的一種簡便方法,但使用這個控件還可以完成更多的事情,包括綁定到完全不同的數據源,將控件(除Menu控件以外)與數據相結合。如果必須經常處理以完全不同的格式(Web.SiteMap以外的格式)存儲的站點地圖數據,那么為了利用SiteMapDataSource控件,必須對SiteMapProvider類進行自定義。創建自定義的數據提供程序是一個相當復雜的過程(這已超出本章的討論范圍),要獲得關于該過程的更多信息,可以參考由Bill Evjen編寫、Wrox出版社出版的Professional ASP.NET 2.0。列舉一些基本的ASP.NET控件類型、
在這個示例中,對Menu控件的修改非常少,只是為它添加了一些屬性值。下面的代碼顯示了添加的屬性值:
<asp:Menu ID="Menu1" runat="server" DataSourceID="siteData"
StaticDisplayLevels="2"
orientation="Vertical"
StaticSubMenuIndent="0"
disappearafter="200"
AccessKey="m"
EnableViewState="false">
<DynamicMenuStyle CssClass="dynamicMenu" />
<DynamicMenuItemStyle CssClass="dynamicMenuItem" />
</asp:Menu>
Menu控件本身的其他屬性都很簡單。這個示例在Properties面板中設置了列表第一行的兩個屬性(DataSourceID和StaticDisplayLevels)。其他屬性控制如下內容:
●?????? Orientation:用于在頁面上設置一個水平菜單條。
●?????? StaticSubMenuIndent:控制顯示了子菜單條目的縮進深度,如果這些菜單層級被設置為以靜態模式顯示。列舉ASP.NET Web常用控件類型?
●?????? DisappearAfter:指定彈出式菜單在消失前的可視時間長度。
●?????? AccessKey:設置鍵盤快捷鍵以增強可用性。
●?????? EanbleViewstate:ASP.NET的功能之一,如果將其設置為true,則頁面在回送到服務器時會維護控件的狀態。例如,在向服務器提交數據時,對文本框中的值保持不變。這個控件沒有必要使用該屬性,而且將其禁用將對頁面的性能有微小的改善。ASP.NET編程入門與應用?
除了這些屬性以外還有兩個屬性,它們幫助定義所顯示控件的可視風格。DynamicMenuStyle控制彈出式菜單本身的外觀,而DynamicMenuItemStyle控制鏈接的外觀。這些內容的風格由CSS控制。第5章將詳細介紹。
本章最后介紹的導航控件是TreeView控件。NET FRAMEWORK下載。這個控件在用法上非常類似于Menu控件。
5. TreeView控件
TreeView和Menu控件在使用上非常類似,但顯示的結果卻完全不同。使用TreeView控件,其實就類似于使用Windows Explorer處理保存在文件系統內的文件、展開或折疊帶有子層次結構的節點。
部署該控件非常類似于部署Menu控件;只需將該控件拖放到頁面上并選擇使用SiteMapDataSource控件提供數據。如果在Wrox United站點上使用該控件,那么頁面將如圖3-43所示。ASP.NET程序設計基礎教程課后答案?
注意在圖3-43中Home節點和Fixtures節點都是展開的,而About節點沒有展開。如果重新放置這個控件,那么除了一些細小的樣式差異之外,可以輕松地使用這個控件代替Menu控件進行導航。
圖? 3-43?