ASP.NET 2.0的視圖狀態(tài)持久性機制
2006/11/6 9:09:11
前言

  只要對ViewState稍有了解,就會知道,Asp.net頁面中ViewState一般是存儲在頁面的一個隱藏域中:

 ?。糹nput type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="一堆亂七八糟的東西">

  當(dāng)我們?yōu)g覽頁面源文件時,看到的那一大堆(特別是當(dāng)頁面有個有大量數(shù)據(jù)的DataGrid,或在ASP.NET2.0中的GridView時)亂七八糟的東西的時候,那就是ViewState了。

  基礎(chǔ)知識

  因為,在ASP.NET2.0中ViewState的持久性存儲機制有了些新的變化,所以,還是簡單介紹下相關(guān)的東西。

  在ASP.NET1.1中,只提供了頁面隱藏域的持久性機制,這樣在某些情況下不得不放棄使用ViewState,試想下,如果你的DataGrid中有上萬條記錄(別認(rèn)為這種變態(tài)的需要是沒有的,有人就碰到過),如果啟用了ViewState,你感保證你的IIS服務(wù)器能承受得住嗎,網(wǎng)絡(luò)承受得主嗎?當(dāng)然你是可以通過重寫Page.SavePageStateToPersistenceMedium()方法來更改你的存儲機制,但別忘了重寫Page.LoadPageStateFromPersistenceMedium(),它們可是一對的啊。

  ASP.NET2.0 中的默認(rèn)視圖狀態(tài)持久性機制依然是在頁上的一個隱藏 HTML 元素(一個 type 屬性設(shè)置為 "hidden" 的元素)中將狀態(tài)信息保留為一個 Base64 編碼的字符串。ASP.NET 頁使用 HiddenFieldPageStatePersister 對象執(zhí)行此項工作,并使用一個 IStateFormatter 實例對對象狀態(tài)信息進(jìn)行序列化和反序列化。或者,對于帶寬和資源有限的移動客戶端,您也可以使用 SessionPageStatePersister 類在服務(wù)器上的 Session 對象中存儲頁的視圖狀態(tài),其實也就多了個Session持久機制而已,讓我們把頁面狀態(tài)保存在Session中,而不是頁面中,這對帶寬是一種節(jié)省。

  但你要深入的了解ViewState持久機制的話,抽象類PageStatePersister你是應(yīng)該去了解的,要在不能支持現(xiàn)有視圖狀態(tài)持久性機制的客戶端上保留視圖狀態(tài),可以擴展 PageStatePersister 類,引入您自己的視圖狀態(tài)持久性方法,并且可以使用頁適配器將 ASP.NET 應(yīng)用程序配置為根據(jù)為其提供頁的客戶端的類型使用不同的視圖狀態(tài)持久性機制。從 PageStatePersister 類派生的類必須重寫 Save 抽象方法,以便在持久性介質(zhì)中存儲視圖狀態(tài)和控件狀態(tài),同時重寫 Load 方法以提取狀態(tài)信息。如果需要將視圖狀態(tài)和控件狀態(tài)序列化為字符串,可以使用通過 StateFormatter 屬性來訪問的 IStateFormatter 對象。它可以高效地將對象狀態(tài)信息序列化和反序列化為 Base64 編碼字符串。還可以重寫 StateFormatter 屬性以提供自己的對象狀態(tài)序列化機制,如何為之,我的代碼中都有介紹,很簡單,看看就明白了。

  ViewState持久性機制

  隱藏域

  這個就不介紹了,默認(rèn)的就是這種。就入前言中的那樣。

  Session

  在ASP.NET2.0中只要重寫PageStatePersister屬性就可以了。

protected override PageStatePersister PageStatePersister
{
 get
 {
  return new SessionPageStatePersister(Page);
 }
}
  要是在ASP.NET1.1中需要重寫LoadPageStateFromPersistenceMedium這兩個方法:

protected override object LoadPageStateFromPersistenceMedium()
{
 return Session["ViewState"];
}

protected override void SavePageStateToPersistenceMedium(object viewState)
{
 Session["ViewState"] = viewState;
 RegisterHiddenField("__VIEWSTATE", "");
}
  數(shù)據(jù)庫(我的示例是SQL Server2000)

  在ASP1.1中,請注意下面紫色的那行,我也不太清楚那有什么用,它讓我郁悶了好幾天,等下你就明白我的郁悶了。還有下面的代碼只是湊我的源碼中拷貝出來的,你完全可以不這樣寫的,除了那些必要的外。

protected override void SavePag

下一頁
返回列表
返回首頁 主站蜘蛛池模板: aaaaaav| 国产妇女馒头高清泬20p多| 中文字幕免费在线视频| 最近2019mv中文字幕免费看| 亚洲电影在线免费观看| 精品国产青草久久久久福利 | 乱人伦精品视频在线观看| 正在播放pppd| 免费人成在线观看网站| 美女被扒开胸罩| 国产人妖在线视频| 99re热久久这里只有精品首页| 国产精品无码久久av| 99re6这里有精品热视频在线| 婷婷五月综合激情| 中文字幕中出在线| 日本久久综合网| 久久精品人人槡人妻人人玩| 久久国产精品鲁丝片| 国产chinesehd精品酒店| 国产香蕉97碰碰久久人人| а√天堂资源中文在线官网| 攵女yin乱合集小丹| 久久国产精品系列| 最近中文字幕完整在线电影| 亚洲国产一区二区三区在线观看| 波多野结衣免费| 免费国产污网站在线观看| 精品福利一区二区免费视频| 国产一级做a爱免费视频| 青青青免费网站在线观看| 国产成人免费视频app| 亚洲宅男精品一区在线观看| 国产美女牲交视频| 97色精品视频在线观看| 天堂中文字幕在线| gogogo高清在线播放| 婷婷六月丁香午夜爱爱| 一级毛片一级毛片免费毛片| 成年女人18级毛片毛片免费观看| 久久99精品久久久久麻豆|