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

ASP.NET中的ViewState本質

開發 后端
本文介紹ASP.NET中的ViewState本質,解決一些疑問:到底ViewState本質上到底是什么東西?為什么ASP.NET中沒有他不行?

大家都聽說過也用過ASP.NET中的ViewState本質,到底ViewState本質上到底是什么東西?為什么ASP.NET中沒有他不行?下面就來談談。。。

我們一般在開發面向對象程序的時候,我們都是用對象保存數據的,比如用對象的屬性,字段來保存對象的狀態。當調用對象的方法時,就可以改變對象的狀態。釋放對象后,對象的狀態就消失。這點大家都熟悉。在開發桌面程序的時候,沒有什么問題,因為對象都一般在本地的內存中,直到不再用那個對象,我們就銷毀它。

但是在Web程序中,問題就大了,比如我們請求一個頁面的時候,我們希望把上一個頁面的狀態保存下來,因為下一個頁面要用到上一個頁面的狀態,常見的例子就是填寫用戶信息時,我們要把這次的信息和上一個頁面中的信息的比較,如果信息不同,就進行一定的操作,等等。但是一旦頁面交給服務器后,上次的頁面的狀態信息就丟失了(HTTP協議是無狀態的)。

所以ASP.NET視圖機制就可以在請求結束時保存對象的狀態,同時在下一個對象請求開始時加載之前的狀態,下一個請求按照下面的步驟來加載狀態:

1.創建一個與上一個請求結束時所注銷對象相同類型的新對象。比如,我們第一次請求的是Default.aspx頁面,在服務器端,ASP.NET運行時就會編譯Default.aspx頁面,經過一系列的動作之后,在服務器端就有一個Default_aspx類的實例,然后再經過一系列的動作之后,就把我們請求的Default.aspx頁面的數據最后以html的形式發送了到我們的瀏覽器中。
 
此時服務器的Default_aspx的實例就銷毀了,對象就沒有了。當我們再瀏覽器中填寫了相關的信息后,再次請求提交Default.aspx頁面時,服務器又會重新編譯Default.aspx 頁面,在然后經過一系列的動作后處理我們的數據。再次把處理的結果發送給我們,然后Default_Aspx實例再次銷毀了。

假如我們第三次還是請求的Default.aspx頁面,我們把數據再次提交,然而這次Default__aspx的實例就只是處理我們這次提交的數據,不會管我們之前提交的數據。說的更加的通俗就是,我們第二次提交的數據是A,我們第三次提交的數據是B,而且我們本次希望頁面把A和B數據比較之后再發送 C數據給我們的,但是本次的處理頁面只是直到本次的提交的數據,即B。所以我們永遠得不到C的結果。

2.為新建的對象加載舊對象的狀態。

只有這樣我們才可以得到我們想要的數據C。我們來進一步看看內部機制。在每個請求結束時(簡單的就可以認為在服務器把數據發送給我們之前,此時數據還在服務器),就會引發一些事件,調用一些方法:

◆頁面自動調用Controls集合中控件的SaveViewState方法,也就是迭代頁面中所有控件,調用他們的SaveViewState方法,因為控件都是Control的子類,而Control類中有這個方法。

◆每個控件的SaveViewState方法把控件的狀態存儲到一個對象中。

◆頁面獲取每個控件的返回的那個保存狀態的對象,然后用與對象有關的轉換器把保存的狀態的對象轉換為字符串,然后把這些字符串表達式組合起來保存在一個隱藏字段中,隱藏字段名為:_VIEWSTATE.如下:

  1. <input type=”hidden” name=”__VIEWSTATE” id=”__VIEWSTATE” value=”/wEPDwULLTE3MDU5MjY  
  2. 4MTkPZBYCAgMPZBYCAgEPFCsAAmRkFgZmD2QWAmYPDxYCHgRUZXh0BQ5QYXltZW50IE1ldGhvZGRkAgEPZB  
  3. YCZg8PDxYCHgtfIURhdGFCb3VuZGdkZGQCBw9kFgRmDw8PFgIfAWdkZGQCAg8PDxYCHwFnZGRkZJDAqbyjC  
  4. j4rjagRWSiVYTp7nQfM” /> 


◆然后_VIEWSTATE隱藏字段就發送到了客戶端,和頁面數據一起。

◆當頁面回傳到服務器,就發生下面的操作:

頁面字符串從_VIEWSTATE中得到字符串表達式。

頁面礦建解析字符串表達式

頁面框架使用與對象相關的類型轉換器,根據字符串表達式重新創建狀態對象。

頁面框架調用Controls集合中每個對象的LoadViewState方法加載之前的狀態
 
然后進行其他的處理。

就這樣,ASP.NET就在請求之間保存了狀態。

總結:以上就是ViewState本質介紹,大家可以這么認為:服務器端把頁面中對象的狀態序列化到客戶端,然后下面再反序列化得到之前的狀態。

【編輯推薦】

  1. ASP.NET中的HttpWorkerRequest對像
  2. 詳解四個ASP.NET狀態
  3. ASP.NET AJAX中ScriptManager控件
  4. SuperPreview會調用ASP.NET或者PHP來渲染網頁
  5. ASP.NET中的ScriptManager控件
責任編輯:佚名 來源: 清華大學出版社
相關推薦

2009-08-04 12:29:57

ViewState概念ASP.NET

2009-08-04 17:20:37

PostBack和ViASP.NET

2009-07-28 16:42:02

ViewState技術ASP.NET應用

2009-08-04 17:00:09

ASP.NET禁用Vi

2009-07-28 13:39:44

加載ViewStateASP.NET

2009-06-09 11:37:51

ViewStateViewDataASP.NET

2009-08-05 15:01:04

ASP.NET應用Vi

2009-07-24 13:41:03

IIS ASP.NET

2009-07-24 10:10:22

ASP.NET

2009-07-24 16:17:42

WebRequestEASP.NET

2009-08-04 10:51:09

Attributes和ASP.NET頁面

2009-08-05 18:14:52

ASP.NET 2.0

2009-07-27 13:01:28

TreeViewASP.NET

2009-07-31 09:58:20

URL映射ASP.NET

2009-08-04 18:05:37

動態編譯ASP.NET

2009-07-22 17:55:52

2009-07-20 17:21:43

Session狀態ASP.NET

2009-08-04 17:30:23

cookieless屬ASP.NET

2009-07-23 16:20:48

HTTP協議ASP.NET

2009-07-30 13:28:55

ASP.NET中的ja
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 偷拍亚洲色图 | 超碰在线免费av | 精品一区二区三区不卡 | 国产精品夜夜春夜夜爽久久电影 | 欧美成年网站 | 欧美日韩视频 | 欧美日韩免费 | 亚洲欧美在线观看 | 一区二区三区韩国 | 久久久资源 | 99精品99久久久久久宅男 | 久久久久久国产精品免费 | 久久久精品国产 | 亚洲精品一区中文字幕 | 一区欧美 | 欧美精品久久久久 | 91麻豆精品国产91久久久久久久久 | 亚洲精品一二三区 | 超碰97免费在线 | 中文字幕三区 | 成人精品国产一区二区4080 | 亚洲精品乱码久久久久久按摩观 | 毛片在线视频 | 国产精品a久久久久 | 久久艹免费视频 | 婷婷毛片| 91日韩| 国产日韩精品一区 | 综合成人在线 | 久久久久久国产精品免费 | 欧美视频一区二区三区 | 久久中文字幕一区 | 日批免费看 | 午夜精品影院 | 另类二区| 国产精品久久久久久中文字 | 亚洲精品久久久一区二区三区 | 欧美一区二区三区在线看 | 日日操操 | 亚洲福利在线观看 | 久久国产精品视频 |