日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢(xún)
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
ASP.NET 2.0數(shù)據(jù)教程:SiteMapDataSource控件

在asp.net 2.0中我們可以像asp.net 1.x一樣,有多種編程方式可以訪問(wèn)數(shù)據(jù),還可以通過(guò)新的數(shù)據(jù)源控件訪問(wèn)。

成都創(chuàng)新互聯(lián)公司從2013年開(kāi)始,先為萬(wàn)載等服務(wù)建站,萬(wàn)載等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢(xún)服務(wù)。為萬(wàn)載企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問(wèn)題。

這里有多個(gè)內(nèi)置的數(shù)據(jù)源控件,比如用來(lái)訪問(wèn)關(guān)系數(shù)據(jù)庫(kù)數(shù)據(jù)的SqlDataSource控件,用來(lái)訪問(wèn)類(lèi)所提供的數(shù)據(jù)的ObjectDataSoruce控件等等。你還可以創(chuàng)建你自己的自定義數(shù)據(jù)源控件。

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

為了獲取站點(diǎn)地圖中的數(shù)據(jù),asp.net提供了SiteMapDataSource控件,它允許我們綁定一個(gè)Web控件來(lái)顯示我們的站點(diǎn)地圖。TreeView和Menu這兩個(gè)Web控件常常用來(lái)提供導(dǎo)航用戶(hù)界面。要綁定站點(diǎn)地圖中的數(shù)據(jù)到這兩個(gè)控件,添加一個(gè)SiteMapDataSource控件到頁(yè)面中,設(shè)置TreeView或者M(jìn)enu控件的DataSourceID屬性值為SiteMapDataSource控件的ID屬性值就可以了。舉個(gè)例子,我們可以用下面這些標(biāo)記將Menu控件到母板頁(yè)中:

 
 
 
 
  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>  

為了生成優(yōu)化的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控件每次返回站點(diǎn)地圖層次中的一級(jí),從站點(diǎn)地圖中的根節(jié)點(diǎn)開(kāi)始(在我們的站點(diǎn)地圖中是Home),然后是下一個(gè)級(jí)(Basic Reporting,Filtering Reports和Customized Formatting)等等。

當(dāng)將SiteMapDataSource綁定到Repeater時(shí),它遍歷***級(jí)并且用ItemTemplate顯示***級(jí)的每個(gè)SiteMapNode實(shí)例。我們可以使用Eval(屬性名稱(chēng))訪問(wèn)SiteMapNode的細(xì)節(jié),這樣我們就可以得到SiteMapNode的Url和Title屬性給HyperLink控件。

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

 
 
 
 
  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> 

從上面可以看出,站點(diǎn)地圖的第二級(jí)節(jié)點(diǎn)(Basic Reporting,Filtering Reports和Customized Formatting)被顯示而不是***個(gè)。

這是因?yàn)镾iteMapDataSource控件的ShowStartingNode屬性被設(shè)為false,導(dǎo)致SiteMapDataSource跳過(guò)了站點(diǎn)地圖的根節(jié)點(diǎn)取而代之的是從站點(diǎn)地圖的層次的第二級(jí)開(kāi)始返回信息。

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

 
 
 
 
  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> 

這兩個(gè)Repeater生成的HTML標(biāo)記(為了節(jié)省篇幅一些標(biāo)記被移除了):

 
 
 
 
  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風(fēng)格選擇自Rachel Andrew的書(shū):The CSS Anthology: 101 Essential Tips, Tricks, & Hacks,< ul>和< li>元素的風(fēng)格將顯示如下:

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

這個(gè)菜單在母板頁(yè)中定義的,綁定了在Web.sitemap中定義的站點(diǎn)地圖,這意味著所有站點(diǎn)地圖的修改會(huì)立即反應(yīng)到所有使用了Site.master母板頁(yè)的頁(yè)面。

關(guān)掉視圖狀態(tài)

所有的asp.net控件可以隨意的保持它們的狀態(tài)到View State(譯注:當(dāng)原文中采用的是開(kāi)頭字母大寫(xiě)的ViewState將不翻譯)中,最終生成HTML時(shí)它被系列化并保存在一個(gè)隱藏的表單域中??丶肰iewState來(lái)記憶它們?cè)陧?yè)面返回時(shí)被程序改變的狀態(tài),比如Web控件綁定的數(shù)據(jù)。如果視圖狀態(tài)允許信息可以在頁(yè)面返回時(shí)保持,它會(huì)增大發(fā)送到客戶(hù)端HTML代碼的尺寸,如果在沒(méi)有確切的監(jiān)控下會(huì)使頁(yè)面膨脹得很厲害。數(shù)據(jù)顯示控件-尤其是GridView控件-會(huì)顯著地增加大量的額外的標(biāo)記到頁(yè)面中。當(dāng)然,這些增長(zhǎng)可能對(duì)寬帶用戶(hù)毫無(wú)影響,但是視圖狀態(tài)會(huì)給撥號(hào)上網(wǎng)的用戶(hù)增加幾秒鐘的延遲。

要觀察視圖狀態(tài)的影響,在瀏覽器里打開(kāi)這個(gè)頁(yè)面然后查看頁(yè)面的源代碼(對(duì)于Internet Explorer,點(diǎn)擊”查看”菜單并且選擇源代碼選項(xiàng))。你還可以打開(kāi)頁(yè)面跟蹤選項(xiàng)以觀察這個(gè)頁(yè)面上每個(gè)控件的視圖狀態(tài)。視圖狀態(tài)的信息被系列化并放在位于跟隨在< form>標(biāo)簽后面的< div>元素里的名為_(kāi)VIEWSTATE的隱藏表單域中。

視圖狀態(tài)只在頁(yè)面上使用了Form時(shí)才會(huì)被保持;如果你的aspx頁(yè)面沒(méi)有包含

< form runat=”server”>的聲明,那么***產(chǎn)生的HTML標(biāo)記中將不含有VIEWSTATE隱藏表單域。

母板頁(yè)產(chǎn)生的VIEWSTATE隱藏表單域大概有1800個(gè)字節(jié)。這些額外的數(shù)據(jù)主要是SiteMapDataSource控件為Repeater控件提供的數(shù)據(jù)內(nèi)容產(chǎn)生的。也許1800字節(jié)左右看起來(lái)還不算很多,但是使用了GridView并且使用了很多字段和記錄的視圖狀態(tài)很容易就膨脹10倍或更多。

可以將EnableViewState屬性設(shè)為false在頁(yè)面級(jí)或者控件級(jí)關(guān)閉視圖狀態(tài),從而可以減少產(chǎn)生的標(biāo)記的大小。Web控件利用視圖狀態(tài)在頁(yè)面返回時(shí)保持要綁定到數(shù)據(jù)顯示控件的數(shù)據(jù),當(dāng)關(guān)閉了數(shù)據(jù)顯示控件的視圖狀態(tài)后,在每次頁(yè)面返回時(shí)都必須重新綁定數(shù)據(jù)到控件。在asp.net 1.x的時(shí)候這個(gè)職責(zé)落到開(kāi)發(fā)者身上;在asp.net 2.0里,頁(yè)面返回時(shí),數(shù)據(jù)顯示控件會(huì)在必要的時(shí)候重新綁定數(shù)據(jù)。

設(shè)置Repeater控件的EnableViewState為false可以減少頁(yè)面的視圖狀態(tài)??梢酝ㄟ^(guò)屬性窗口設(shè)置或者在代碼視圖里手動(dòng)修改。通過(guò)這些改變,Repeater標(biāo)記將會(huì)像這樣:

 
 
 
 
  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>  

經(jīng)過(guò)這些變化,頁(yè)面產(chǎn)生的視圖狀態(tài)減少到52個(gè)字節(jié),減少了97%的視圖狀態(tài)數(shù)據(jù)!在這個(gè)指南系列里我會(huì)關(guān)閉所有數(shù)據(jù)控件的視圖狀態(tài)以減少產(chǎn)生標(biāo)記的大小。在大多數(shù)例子里會(huì)在沒(méi)有提示的情況下將EnableViewState屬性設(shè)為false。

僅有當(dāng)數(shù)據(jù)Web控件必須打開(kāi)它的視圖狀態(tài)才能提供期望的功能的情況下我們才討論。

【編輯推薦】

  1. ASP.NET MVC路徑選擇系統(tǒng)構(gòu)建
  2. ASP.NET MVC框架中的URL路徑選擇場(chǎng)景
  3. ASP.NET MVC 框架URL路徑選擇規(guī)則
  4. ASP.NET MVC框架:使用強(qiáng)類(lèi)型類(lèi)來(lái)傳遞ViewData
  5. 使用ASP.NET MVC框架創(chuàng)建電子商務(wù)網(wǎng)站

文章題目:ASP.NET 2.0數(shù)據(jù)教程:SiteMapDataSource控件
網(wǎng)站地址:http://www.5511xx.com/article/cojsgjs.html