自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

ASP.NET 2.0頁面狀態(tài)持續(xù):ViewState與控件

開發(fā) 后端
本文介紹了ASP.NET 2.0頁面狀態(tài)持續(xù)程序的實現(xiàn)過程。ASP.NET 2.0 允許您修改臨時保持頁面狀態(tài)的位置和方式。

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

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

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

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

當查看該頁面所呈現(xiàn)的 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 屬性添加重寫并使用內(nèi)置 SessionPageStatePersister 時,該頁面的行為保持不變,但是用于大量狀態(tài)數(shù)據(jù)的存儲將從隱藏字段轉(zhuǎn)換為會話狀態(tài)。

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

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

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

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

在某些方案中,您可能只想將與之類似的代碼添加到一個較小的頁面集中,因此添加與之類似的簡單重寫也許是可接受的。當您希望一個完整的應(yīng)用程序或一個較大的頁面集擁有該行為時,需要一個用于控制它的更集中化的方式。有幾種方式可以實現(xiàn)這一點。我們可以將創(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 為該頁面生成的代碼從該基頁面繼承,而且無需在每個頁面中復(fù)制該代碼。

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

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

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

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

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

【編輯推薦】

  1. ASP.NET 2.0數(shù)據(jù)綁定控件的自定義集合
  2. 列表控件示例:HeadlineList
  3. ASP.NET 2.0數(shù)據(jù)綁定機制:生成控件
  4. ASP.NET 2.0數(shù)據(jù)綁定的發(fā)展簡述
  5. 概述ASP.NET調(diào)用Excel進程
責(zé)任編輯:yangsai 來源: MSDN
相關(guān)推薦

2009-08-04 17:00:09

ASP.NET禁用Vi

2009-07-28 13:39:44

加載ViewStateASP.NET

2009-07-28 16:42:02

ViewState技術(shù)ASP.NET應(yīng)用

2009-08-04 12:29:57

ViewState概念ASP.NET

2009-08-04 17:20:37

PostBack和ViASP.NET

2009-07-24 17:15:52

SiteMapData

2009-07-21 15:27:12

ASP.NET 2.0

2009-08-05 15:01:04

ASP.NET應(yīng)用Vi

2009-07-20 15:19:52

ViewState本質(zhì)ASP.NET

2009-06-09 11:37:51

ViewStateViewDataASP.NET

2009-07-31 10:01:08

Button與驗證控件ValidatorGr

2009-07-24 16:37:04

創(chuàng)建母版頁asp.net 2.0

2009-08-04 13:10:05

ASP.NET服務(wù)器控

2009-08-05 17:43:48

ASP.NET 2.0

2009-07-21 15:50:47

ASP.NET控件JavaScript

2009-07-27 15:58:25

添加GridView

2009-07-23 14:43:24

數(shù)據(jù)源控件ASP.NET 2.0

2009-08-04 13:39:43

ASP.NET 2.0

2009-07-20 18:02:48

GridView控件ASP.NET 2.0

2009-07-29 09:34:54

IsPostBack屬ASP.NET
點贊
收藏

51CTO技術(shù)棧公眾號