您好,登錄后才能下訂單哦!
本篇文章給大家分享的是有關ASP.NET 2.0中如何使用SiteMapDataSource控件,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
數據源控件作為你的aspx頁面和底層數據的代理。為了顯示數據源控件查詢到的數據,我們要添加其他Web控件到頁面上,并且將它和數據源控件綁定。要綁定一個Web控件到一個數據源控件,只需要簡單的設置這個Web控件的DataSourceID屬性值為數據源控件的ID屬性值。
為了獲取站點地圖中的數據,asp.net提供了SiteMapDataSource控件,它允許我們綁定一個Web控件來顯示我們的站點地圖。TreeView和Menu這兩個Web控件常常用來提供導航用戶界面。要綁定站點地圖中的數據到這兩個控件,添加一個SiteMapDataSource控件到頁面中,設置TreeView或者Menu控件的DataSourceID屬性值為SiteMapDataSource控件的ID屬性值就可以了。舉個例子,我們可以用下面這些標記將Menu控件到母板頁中:
< div id="navigation"> < asp:Menu ID="Menu1" runat="server" DataSourceID="SiteMapDataSource1"> < /asp:Menu> < asp:SiteMapDataSource ID="SiteMapDataSource1" runat="server" /> < /div>
為了生成優化的HTML,我們可以綁定SiteMapDataSource控件到Repeater控件,如下:
< div id="navigation"> < ul> < li>< asp:HyperLink runat="server" ID="lnkHome" NavigateUrl="~/Default.aspx">Home< /asp:HyperLink>< /li> < asp:Repeater runat="server" ID="menu" DataSourceID="SiteMapDataSource1"> < ItemTemplate> < li> < asp:HyperLink runat="server" NavigateUrl="< %# Eval("Url") %>"> < %# Eval("Title") %> < /asp:HyperLink> < /li> < /ItemTemplate> < /asp:Repeater> < /ul> < asp:SiteMapDataSource ID="SiteMapDataSource1" runat="server" ShowStartingNode="false" /> < /div>
SiteMapDataSource控件每次返回站點地圖層次中的一級,從站點地圖中的根節點開始(在我們的站點地圖中是Home),然后是下一個級(Basic Reporting,Filtering Reports和Customized Formatting)等等。
當將SiteMapDataSource綁定到Repeater時,它遍歷***級并且用ItemTemplate顯示***級的每個SiteMapNode實例。我們可以使用Eval(屬性名稱)訪問SiteMapNode的細節,這樣我們就可以得到SiteMapNode的Url和Title屬性給HyperLink控件。
下面顯示的是上面使用Repeater控件例子生成的HTML標記:
< li> < a href="/Code/BasicReporting/Default.aspx">Basic Reporting< /a> < /li> < li> < a href="/Code/Filtering/Default.aspx">Filtering Reports< /a> < /li> < li> < a href="/Code/CustomFormatting/Default.aspx"> Customized Formatting< /a> < /li>
從上面可以看出,站點地圖的第二級節點(Basic Reporting,Filtering Reports和Customized Formatting)被顯示而不是***個。
這是因為SiteMapDataSource控件的ShowStartingNode屬性被設為false,導致SiteMapDataSource跳過了站點地圖的根節點取而代之的是從站點地圖的層次的第二級開始返回信息。
為了顯示Basic Reporting,Filtering Reports和Customized Formatting的子SiteMapNode,我們可以向先前的Repeater的ItemTemplate里添加另外一個Repeater。第二個Repeater將綁定到SiteMapNode實例的子結點屬性,如下:
< asp:Repeater runat="server" ID="menu" DataSourceID="SiteMapDataSource1"> < ItemTemplate> < li> < asp:HyperLink runat="server" NavigateUrl="< %# Eval("Url") %>"> < %# Eval("Title") %>< /asp:HyperLink> < asp:Repeater runat="server" DataSource="< %# ((SiteMapNode) Container.DataItem).ChildNodes %>"> < HeaderTemplate> < ul> < /HeaderTemplate> < ItemTemplate> < li> < asp:HyperLink runat="server" NavigateUrl="< %# Eval("Url") %>"> < %# Eval("Title") %>< /asp:HyperLink> < /li> < /ItemTemplate> < FooterTemplate> < /ul> < /FooterTemplate> < /asp:Repeater> < /li> < /ItemTemplate> < /asp:Repeater>
這兩個Repeater生成的HTML標記(為了節省篇幅一些標記被移除了):
< li> < a href="/Code/BasicReporting/Default.aspx">Basic Reporting< /a> < ul> < li> < a href="/Code/BasicReporting/SimpleDisplay.aspx"> Simple Display< /a> < /li> < li> < a href="/Code/BasicReporting/DeclarativeParams.aspx"> Declarative Parameters< /a> < /li> < li> < a href="/Code/BasicReporting/ProgrammaticParams.aspx"> Setting Parameter Values< /a> < /li> < /ul> < /li> < li> < a href="/Code/Filtering/Default.aspx">Filtering Reports< /a> < /li> < li> < a href="/Code/CustomFormatting/Default.aspx"> Customized Formatting< /a> < /li>
使用的CSS風格選擇自Rachel Andrew的書:The CSS Anthology: 101 Essential Tips, Tricks, & Hacks,< ul>和< li>元素的風格將顯示如下:
圖11:用兩個Repeater和一些CSS顯示的菜單
這個菜單在母板頁中定義的,綁定了在Web.sitemap中定義的站點地圖,這意味著所有站點地圖的修改會立即反應到所有使用了Site.master母板頁的頁面。
關掉視圖狀態
所有的asp.net控件可以隨意的保持它們的狀態到View State(譯注:當原文中采用的是開頭字母大寫的ViewState將不翻譯)中,最終生成HTML時它被系列化并保存在一個隱藏的表單域中。控件用ViewState來記憶它們在頁面返回時被程序改變的狀態,比如Web控件綁定的數據。如果視圖狀態允許信息可以在頁面返回時保持,它會增大發送到客戶端HTML代碼的尺寸,如果在沒有確切的監控下會使頁面膨脹得很厲害。數據顯示控件-尤其是GridView控件-會顯著地增加大量的額外的標記到頁面中。當然,這些增長可能對寬帶用戶毫無影響,但是視圖狀態會給撥號上網的用戶增加幾秒鐘的延遲。
要觀察視圖狀態的影響,在瀏覽器里打開這個頁面然后查看頁面的源代碼(對于Internet Explorer,點擊”查看”菜單并且選擇源代碼選項)。你還可以打開頁面跟蹤選項以觀察這個頁面上每個控件的視圖狀態。視圖狀態的信息被系列化并放在位于跟隨在< form>標簽后面的< div>元素里的名為_VIEWSTATE的隱藏表單域中。
視圖狀態只在頁面上使用了Form時才會被保持;如果你的aspx頁面沒有包含
< form runat=”server”>的聲明,那么***產生的HTML標記中將不含有VIEWSTATE隱藏表單域。
母板頁產生的VIEWSTATE隱藏表單域大概有1800個字節。這些額外的數據主要是SiteMapDataSource控件為Repeater控件提供的數據內容產生的。也許1800字節左右看起來還不算很多,但是使用了GridView并且使用了很多字段和記錄的視圖狀態很容易就膨脹10倍或更多。
可以將EnableViewState屬性設為false在頁面級或者控件級關閉視圖狀態,從而可以減少產生的標記的大小。Web控件利用視圖狀態在頁面返回時保持要綁定到數據顯示控件的數據,當關閉了數據顯示控件的視圖狀態后,在每次頁面返回時都必須重新綁定數據到控件。在asp.net 1.x的時候這個職責落到開發者身上;在asp.net 2.0里,頁面返回時,數據顯示控件會在必要的時候重新綁定數據。
設置Repeater控件的EnableViewState為false可以減少頁面的視圖狀態。可以通過屬性窗口設置或者在代碼視圖里手動修改。通過這些改變,Repeater標記將會像這樣:
< asp:Repeater runat="server" ID="menu" DataSourceID="SiteMapDataSource1" EnableViewState="False"> < ItemTemplate> < i>ItemTemplate contents omitted for brevity< /i> < /ItemTemplate> < /asp:Repeater>
經過這些變化,頁面產生的視圖狀態減少到52個字節,減少了97%的視圖狀態數據!在這個指南系列里我會關閉所有數據控件的視圖狀態以減少產生標記的大小。在大多數例子里會在沒有提示的情況下將EnableViewState屬性設為false。
以上就是ASP.NET 2.0中如何使用SiteMapDataSource控件,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。