成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

ASP.NET 2.0數據教程:SiteMapDataSource控件

開發 后端
本文介紹了如何在asp.net 2.0中利用SiteMapDataSource控件顯示菜單。

在asp.net 2.0中我們可以像asp.net 1.x一樣,有多種編程方式可以訪問數據,還可以通過新的數據源控件訪問。

這里有多個內置的數據源控件,比如用來訪問關系數據庫數據的SqlDataSource控件,用來訪問類所提供的數據的ObjectDataSoruce控件等等。你還可以創建你自己的自定義數據源控件。

數據源控件作為你的aspx頁面和底層數據的代理。為了顯示數據源控件查詢到的數據,我們要添加其他Web控件到頁面上,并且將它和數據源控件綁定。要綁定一個Web控件到一個數據源控件,只需要簡單的設置這個Web控件的DataSourceID屬性值為數據源控件的ID屬性值。

為了獲取站點地圖中的數據,asp.net提供了SiteMapDataSource控件,它允許我們綁定一個Web控件來顯示我們的站點地圖。TreeView和Menu這兩個Web控件常常用來提供導航用戶界面。要綁定站點地圖中的數據到這兩個控件,添加一個SiteMapDataSource控件到頁面中,設置TreeView或者Menu控件的DataSourceID屬性值為SiteMapDataSource控件的ID屬性值就可以了。舉個例子,我們可以用下面這些標記將Menu控件到母板頁中:

  1. < div id="navigation">  
  2.     < asp:Menu ID="Menu1" runat="server" 
  3.       DataSourceID="SiteMapDataSource1">  
  4.     < /asp:Menu>  
  5.  
  6.     < asp:SiteMapDataSource ID="SiteMapDataSource1" runat="server" />  
  7. < /div>  

為了生成優化的HTML,我們可以綁定SiteMapDataSource控件到Repeater控件,如下:

  1. < div id="navigation">  
  2.      < ul>  
  3.          < li>< asp:HyperLink runat="server" ID="lnkHome" 
  4.           NavigateUrl="~/Default.aspx">Home< /asp:HyperLink>< /li>  
  5.    
  6.          < asp:Repeater runat="server" ID="menu" 
  7.            DataSourceID="SiteMapDataSource1">  
  8.              < ItemTemplate>  
  9.                  < li>  
  10.                     < asp:HyperLink runat="server" 
  11.                       NavigateUrl="< %# Eval("Url") %>">  
  12.                       < %# Eval("Title") %>  
  13.                     < /asp:HyperLink>  
  14.                 < /li>  
  15.             < /ItemTemplate>  
  16.         < /asp:Repeater>  
  17.     < /ul>  
  18.  
  19.     < asp:SiteMapDataSource ID="SiteMapDataSource1" 
  20.       runat="server" ShowStartingNode="false" />  
  21. < /div> 

SiteMapDataSource控件每次返回站點地圖層次中的一級,從站點地圖中的根節點開始(在我們的站點地圖中是Home),然后是下一個級(Basic Reporting,Filtering Reports和Customized Formatting)等等。

當將SiteMapDataSource綁定到Repeater時,它遍歷***級并且用ItemTemplate顯示***級的每個SiteMapNode實例。我們可以使用Eval(屬性名稱)訪問SiteMapNode的細節,這樣我們就可以得到SiteMapNode的Url和Title屬性給HyperLink控件。

下面顯示的是上面使用Repeater控件例子生成的HTML標記: 

  1. < li>  
  2.      < a href="/Code/BasicReporting/Default.aspx">Basic Reporting< /a>  
  3.  < /li>  
  4.    
  5.  < li>  
  6.      < a href="/Code/Filtering/Default.aspx">Filtering Reports< /a>  
  7.  < /li>  
  8.    
  9.  < li>  
  10.     < a href="/Code/CustomFormatting/Default.aspx">  
  11.      Customized Formatting< /a>  
  12. < /li> 

從上面可以看出,站點地圖的第二級節點(Basic Reporting,Filtering Reports和Customized Formatting)被顯示而不是***個。

這是因為SiteMapDataSource控件的ShowStartingNode屬性被設為false,導致SiteMapDataSource跳過了站點地圖的根節點取而代之的是從站點地圖的層次的第二級開始返回信息。

為了顯示Basic Reporting,Filtering Reports和Customized Formatting的子SiteMapNode,我們可以向先前的Repeater的ItemTemplate里添加另外一個Repeater。第二個Repeater將綁定到SiteMapNode實例的子結點屬性,如下:

  1. < asp:Repeater runat="server" ID="menu" DataSourceID="SiteMapDataSource1">  
  2.     < ItemTemplate>  
  3.         < li>  
  4.             < asp:HyperLink runat="server" 
  5.             NavigateUrl="< %# Eval("Url") %>">  
  6.             < %# Eval("Title") %>< /asp:HyperLink>  
  7.  
  8.              < asp:Repeater runat="server" 
  9.               DataSource="< %# ((SiteMapNode)  
  10.              Container.DataItem).ChildNodes %>">  
  11.                 < HeaderTemplate>  
  12.                     < ul>  
  13.                 < /HeaderTemplate>  
  14.  
  15.                 < ItemTemplate>  
  16.                     < li>  
  17.                         < asp:HyperLink runat="server" 
  18.                          NavigateUrl="< %# Eval("Url") %>">  
  19.                          < %# Eval("Title") %>< /asp:HyperLink>  
  20.                     < /li>  
  21.                 < /ItemTemplate>  
  22.  
  23.                 < FooterTemplate>  
  24.                     < /ul>  
  25.                 < /FooterTemplate>  
  26.             < /asp:Repeater>  
  27.         < /li>  
  28.     < /ItemTemplate>  
  29. < /asp:Repeater> 

這兩個Repeater生成的HTML標記(為了節省篇幅一些標記被移除了):

  1. < li>  
  2.      < a href="/Code/BasicReporting/Default.aspx">Basic Reporting< /a>  
  3.      < ul>  
  4.         < li>  
  5.            < a href="/Code/BasicReporting/SimpleDisplay.aspx">  
  6.              Simple Display< /a>  
  7.         < /li>  
  8.         < li>  
  9.            < a href="/Code/BasicReporting/DeclarativeParams.aspx">  
  10.             Declarative Parameters< /a>  
  11.        < /li>  
  12.        < li>  
  13.           < a href="/Code/BasicReporting/ProgrammaticParams.aspx">  
  14.             Setting Parameter Values< /a>  
  15.        < /li>  
  16.     < /ul>  
  17. < /li>  
  18.  
  19. < li>  
  20.     < a href="/Code/Filtering/Default.aspx">Filtering Reports< /a>  
  21.       
  22. < /li>  
  23.  
  24. < li>  
  25.     < a href="/Code/CustomFormatting/Default.aspx">  
  26.       Customized Formatting< /a>  
  27.       
  28. < /li> 

使用的CSS風格選擇自Rachel Andrew的書:The CSS Anthology: 101 Essential Tips, Tricks, & Hacks,< ul>和< li>元素的風格將顯示如下:

用兩個Repeater和一些CSS顯示的菜單 

圖11:用兩個Repeater和一些CSS顯示的菜單

這個菜單在母板頁中定義的,綁定了在Web.sitemap中定義的站點地圖,這意味著所有站點地圖的修改會立即反應到所有使用了Site.master母板頁的頁面。

關掉視圖狀態

所有的asp.net控件可以隨意的保持它們的狀態到View State(譯注:當原文中采用的是開頭字母大寫的ViewState將不翻譯)中,最終生成HTML時它被系列化并保存在一個隱藏的表單域中??丶肰iewState來記憶它們在頁面返回時被程序改變的狀態,比如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標記將會像這樣: 

  1. < asp:Repeater runat="server" ID="menu" DataSourceID="SiteMapDataSource1"   
  2. EnableViewState="False">  
  3.     < ItemTemplate>  
  4.          < i>ItemTemplate contents omitted for brevity< /i>   
  5.     < /ItemTemplate>  
  6. < /asp:Repeater>  

經過這些變化,頁面產生的視圖狀態減少到52個字節,減少了97%的視圖狀態數據!在這個指南系列里我會關閉所有數據控件的視圖狀態以減少產生標記的大小。在大多數例子里會在沒有提示的情況下將EnableViewState屬性設為false。

僅有當數據Web控件必須打開它的視圖狀態才能提供期望的功能的情況下我們才討論。

【編輯推薦】

  1. ASP.NET MVC路徑選擇系統構建
  2. ASP.NET MVC框架中的URL路徑選擇場景
  3. ASP.NET MVC 框架URL路徑選擇規則
  4. ASP.NET MVC框架:使用強類型類來傳遞ViewData
  5. 使用ASP.NET MVC框架創建電子商務網站
責任編輯:book05 來源: 博客園
相關推薦

2009-07-23 14:43:24

數據源控件ASP.NET 2.0

2009-07-27 08:51:24

ObjectDataS

2009-08-05 17:43:48

ASP.NET 2.0

2009-07-27 16:09:05

GridView顯示數

2009-07-21 15:27:12

ASP.NET 2.0

2009-07-24 17:08:31

添加站點地圖asp.net

2009-07-24 12:41:21

BLL類

2009-07-24 16:37:04

創建母版頁asp.net 2.0

2009-07-27 03:21:00

breadcrumb導

2009-07-27 16:22:54

GridView選擇行

2009-07-27 09:01:44

ObjectDataS

2009-07-24 13:25:43

創建數據訪問層

2009-07-27 09:28:55

TableAdapte

2009-07-27 09:39:04

SelectMetho

2009-07-24 14:15:51

數據訪問層

2009-07-28 14:06:28

ASP.NET 2.0

2009-07-22 17:21:27

ASP.NET 2.0

2009-08-05 17:58:53

自定義集合ASP.NET 2.0

2009-07-24 16:55:53

添加aspx頁面

2009-07-24 14:02:39

ASP.NET 2.0
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国内精品久久久久久久 | 亚洲国产一区二区三区在线观看 | 999久久久免费精品国产 | 亚洲国产一区二区视频 | a级大片免费观看 | 在线播放中文字幕 | av日韩一区 | 久草网站| 亚洲精品乱码久久久久久按摩 | 精品国产91乱码一区二区三区 | 亚洲国产精品suv | 亚欧洲精品在线视频免费观看 | 久久亚洲春色中文字幕久久久 | 天天干 夜夜操 | 国产精品日韩欧美一区二区三区 | 特一级黄色毛片 | 日韩欧美国产一区二区三区 | 一二区视频 | 国产在线永久免费 | 7777奇米影视 | 日日操视频 | 久久久久久久久综合 | 日本天天操| 国产高清视频一区二区 | 久久黄色网| 国产黄色在线观看 | a级黄色毛片免费播放视频 国产精品视频在线观看 | 午夜寂寞福利视频 | 成人国产网站 | 亚洲精品乱码8久久久久久日本 | 午夜三区 | 黑人巨大精品欧美黑白配亚洲 | 国产精品免费一区二区三区四区 | 亚洲精品av在线 | 日韩av一区二区在线观看 | 亚洲精品3 | 99精品国产一区二区青青牛奶 | 国产午夜亚洲精品不卡 | 亚洲欧美日韩在线不卡 | 狠狠爱综合网 | 欧美日韩国产综合在线 |