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

RELATEED CONSULTING
相關咨詢
選擇下列產品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

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

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

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

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

要使用除默認持續(xù)程序之外的持續(xù)程序,需要重寫該頁的 PageStatePersister 屬性,并返回另一個持續(xù)程序的一個實例。首先,下面的一個簡單頁面只使用大量數字填充一個 ArrayList,然后將它綁定到一個 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> 

當查看該頁面所呈現的 HTML 時,您會看到一個用于傳送 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. ...  

當我們向 PageStatePersister 屬性添加重寫并使用內置 SessionPageStatePersister 時,該頁面的行為保持不變,但是用于大量狀態(tài)數據的存儲將從隱藏字段轉換為會話狀態(tài)。

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

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

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

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

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

 
 
 
  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 為該頁面生成的代碼從該基頁面繼承,而且無需在每個頁面中復制該代碼。

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

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

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

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

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

【編輯推薦】

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

網站標題:ASP.NET2.0頁面狀態(tài)持續(xù):ViewState與控件
分享路徑:http://www.5511xx.com/article/dpppghe.html