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

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

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
ASP.NET2.0頁面狀態(tài)持續(xù):ViewState與控件

ASP.NET 2.0頁面狀態(tài)持續(xù)程序

ASP.NET 控件的開發(fā)人員利用 ViewState 和控件狀態(tài)來保持瀏覽器發(fā)出的各請(qǐng)求之間的狀態(tài)信息。通常,該信息作為由頁面呈現(xiàn)的 HTML 標(biāo)記中的隱藏字段傳送給客戶端。然后,該頁面狀態(tài)作為下一個(gè)窗體提交的一部分傳回服務(wù)器并還原給控件或頁面。即使瀏覽器使用 HTTP 協(xié)議(該協(xié)議定義為無狀態(tài)),但利用臨時(shí)存儲(chǔ)狀態(tài)信息的功能,控件的開發(fā)人員能夠輕松地提供更豐富的應(yīng)用程序體驗(yàn)。

ASP.NET 2.0 允許您修改臨時(shí)保持頁面狀態(tài)的位置和方式。在某些情況下,避免在客戶端與服務(wù)器之間往返傳送數(shù)據(jù)可能更為可取。ASP.NET 2.0 提供的兩個(gè)頁面狀態(tài)持續(xù)程序分別是 HiddenFieldPageState 持續(xù)程序(我們已提到過)和 SessionPageStatePersister。SessionPageStatePersister 利用與瀏覽器會(huì)話相關(guān)的服務(wù)器會(huì)話存儲(chǔ)數(shù)據(jù)。使用 SessionPageStatePersister 有正反兩個(gè)方面。對(duì)于發(fā)送到(自)瀏覽器的頁面而言,使用會(huì)話(而非隱藏字段)可以避免其大小的增加。在許多情況中,頁面狀態(tài)是全部標(biāo)記的一個(gè)重要部分。然而,在會(huì)話中存儲(chǔ)數(shù)據(jù)將占用寶貴的服務(wù)器資源。此外,隱藏字段不像會(huì)話那樣具有相關(guān)的超時(shí)。您可以配置一個(gè)應(yīng)用程序,以便將會(huì)話保持到后端數(shù)據(jù)庫(kù),并避免將負(fù)載直接加到 Web 服務(wù)器。這也將擴(kuò)展至 Web 場(chǎng)方案。

要使用除默認(rèn)持續(xù)程序之外的持續(xù)程序,需要重寫該頁的 PageStatePersister 屬性,并返回另一個(gè)持續(xù)程序的一個(gè)實(shí)例。首先,下面的一個(gè)簡(jiǎn)單頁面只使用大量數(shù)字填充一個(gè) ArrayList,然后將它綁定到一個(gè) GridView 控件。

 
 
 
  1. < !DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"   
  2. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
  3. < script runat="server"> 
  4.     protected override PageStatePersister PageStatePersister {  
  5.         get {  
  6.             return new SessionPageStatePersister(this);  
  7.         }  
  8.     }  
  9.     protected override void OnLoad(EventArgs e) {  
  10.         base.OnLoad(e);  
  11.         if (!IsPostBack) {  
  12.             ArrayList list = new ArrayList();  
  13.             for (int i = 0; i <  1000; i++)  
  14.             {  
  15.                 list.Add(Convert.ToString(i));  
  16.             }  
  17.             GridView1.DataSource = list;  
  18.             GridView1.DataBind();        
  19.         }  
  20.     }  
  21. < /script> 
  22. < html  > 
  23. < head id="Head1" runat="server"> 
  24.     < title>Untitled Page< /title> 
  25. < /head> 
  26. < body> 
  27.     < form id="form1" runat="server"> 
  28.     < div> 
  29.         < asp:GridView ID="GridView1" runat="server" />          
  30.         < asp:Button ID="Button1" runat="server" Text="Submit" />< /div> 
  31.     < /form> 
  32. < /body> 
  33. < /html> 

當(dāng)查看該頁面所呈現(xiàn)的 HTML 時(shí),您會(huì)看到一個(gè)用于傳送 ViewState 的較大隱藏字段。

 
 
 
  1. < !DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"   
  2. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
  3. < html  > 
  4. < head>< title> 
  5.    Untitled Page  
  6. < /title>< /head> 
  7. < body> 
  8.     < form name="form1" method="post" action="default2.aspx" id="form1"> 
  9. < div> 
  10. < input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE"   
  11. value="/wEPDwUKMTQ0MDQzNjk2Ng9kFgICBA9kFgICAQ88KwANAgAPFgYeC18hRGF0YUJv  
  12. dW5kZx4JUGFnZUNvdW50AgEeC18hSXRlbUNvdW50AhRkDBQrAAEWBh4EVHlwZRkrAh4ETmF  
  13. tZQUESXRlbR4JRGF0YUZpZWxkBQEhFgJmD2QWKgIBD2QWAmYPDxYCHgRUZXh0BQEwZGQCAg  
  14. 9kFgJmDw8WAh8GBQExZGQCAw9kFgJmDw8WAh8GBQEyZGQCBA9kFgJmDw8WAh8GBQEzZGQCB  
  15. Q9kFgJmDw8WAh8GBQE0ZGQCBg9kFgJmDw8WAh8GBQE1ZGQCBw9kFgJmDw8WAh8GBQE2ZGQC  
  16. CA9kFgJmDw8WAh8GBQE3ZGQCCQ9kFgJmDw8WAh8GBQE4ZGQCCg9kFgJmDw8WAh8GBQE5ZGQ  
  17. CCw9kFgJmDw8WAh8GBQIxMGRkAgwPZBYCZg8PFgIfBgUCMTFkZAIND2QWAmYPDxYCHwYFAj  
  18. EyZGQCDg9kFgJmDw8WAh8GBQIxM2RkAg8PZBYCZg8PFgIfBgUCMTRkZAIQD2QWAmYPDxYCH  
  19. wYFAjE1ZGQCEQ9kFgJmDw8WAh8GBQIxNmRkAhIPZBYCZg8PFgIfBgUCMTdkZAITD2QWAmYP  
  20. DxYCHwYFAjE4ZGQCFA9kFgJmDw8WAh8GBQIxOWRkAhUPDxYCHgdWaXNpYmxlaGRkGAEFCUd  
  21. yaWRWaWV3MQ9nZMhHZ3iQZp62S8IR8fTJ5ZL42ira" /> 
  22. < /div> 
  23. ...  

當(dāng)我們向 PageStatePersister 屬性添加重寫并使用內(nèi)置 SessionPageStatePersister 時(shí),該頁面的行為保持不變,但是用于大量狀態(tài)數(shù)據(jù)的存儲(chǔ)將從隱藏字段轉(zhuǎn)換為會(huì)話狀態(tài)。

 
 
 
  1. protected override PageStatePersister PageStatePersister  
  2. {  
  3.     get 
  4.     {  
  5.         return new SessionPageStatePersister(this);  
  6.     }  
  7. }  

請(qǐng)注意,在該頁面的源代碼中,隱藏字段值要小得多,但并沒有完全消失。ASP.NET 仍將在頁面輸出中傳送一些最小的數(shù)據(jù)集。

 
 
 
  1. < input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE"   
  2. value="/wEPaA8FDzhjNzkyNTMzNjE1YWEyNxgBBQlHcmlkVmlldzEPZ2QZw  
  3. 44JLJFcglwRl9TiNliE82yAuQ==" /> 

ASP.NET 2.0頁面狀態(tài)持續(xù)的其他方案

在某些方案中,您可能只想將與之類似的代碼添加到一個(gè)較小的頁面集中,因此添加與之類似的簡(jiǎn)單重寫也許是可接受的。當(dāng)您希望一個(gè)完整的應(yīng)用程序或一個(gè)較大的頁面集擁有該行為時(shí),需要一個(gè)用于控制它的更集中化的方式。有幾種方式可以實(shí)現(xiàn)這一點(diǎn)。我們可以將創(chuàng)建該持續(xù)程序的代碼移動(dòng)到從頁面繼承的類中:

 
 
 
  1. using System;  
  2. using System.Data;  
  3. using System.Configuration;  
  4. using System.Web;  
  5. using System.Web.Security;  
  6. using System.Web.UI;  
  7. using System.Web.UI.WebControls;  
  8. using System.Web.UI.WebControls.WebParts;  
  9. using System.Web.UI.HtmlControls;  
  10. public class PagePersisterBasePage : Page  
  11. {  
  12.     public PagePersisterBasePage()   {  
  13.     }  
  14.     protected override PageStatePersister PageStatePersister {  
  15.         get {  
  16.             return new SessionPageStatePersister(this);  
  17.         }  
  18.     }  
  19. }   

ASP.NET 2.0 使您能夠使用“Inherits”頁面指令指定頁面的基類型。然后,ASP.NET 為該頁面生成的代碼從該基頁面繼承,而且無需在每個(gè)頁面中復(fù)制該代碼。

 
 
 
  1. < %@ Page Language="C#"  Inherits="PagePersisterBasePage" %> 

此外,配置選項(xiàng)使我們能夠設(shè)置頁面位置,以便所有頁面使用單一的基頁面類型。在該 web.config 頁中,我們?cè)O(shè)置了 pageBaseType,并且無需將 Inherits 屬性添加到任何頁面來獲取自定義的 PageStatePersister 行為。

 
 
 
  1. < ?xml version="1.0"?> 
  2. < configuration> 
  3.    < system.web> 
  4.     < pages pageBaseType="PagePersisterBasePage" /> 
  5.    < /system.web> 
  6. < /configuration> 

更改 PageStatePersister 并不是一件輕松的事。請(qǐng)仔細(xì)考慮您的應(yīng)用程序和部署。盡管在隱藏字段中往返傳送 ViewState 存在相關(guān)的開銷,但是要將狀態(tài)保持在那里,則需要有直接的服務(wù)器資源消耗。通過前面的示例您可以看到,可以插入自定義持續(xù)程序以便將狀態(tài)存儲(chǔ)在其他地方,例如,后端數(shù)據(jù)庫(kù)或 Web 場(chǎng)共享的狀態(tài)服務(wù)。此外,正如我們所演示的,您可以集中控制應(yīng)用程序的行為,或者按頁在頁面上進(jìn)行控制。

以上就是ASP.NET 2.0頁面狀態(tài)持續(xù)程序的實(shí)現(xiàn)原理。

【編輯推薦】

  1. ASP.NET 2.0數(shù)據(jù)綁定控件的自定義集合
  2. 列表控件示例:HeadlineList
  3. ASP.NET 2.0數(shù)據(jù)綁定機(jī)制:生成控件
  4. ASP.NET 2.0數(shù)據(jù)綁定的發(fā)展簡(jiǎn)述
  5. 概述ASP.NET調(diào)用Excel進(jìn)程

分享標(biāo)題:ASP.NET2.0頁面狀態(tài)持續(xù):ViewState與控件
文章網(wǎng)址:http://m.5511xx.com/article/dpppghe.html