ASP.NET服務器控件之視圖狀態(tài)
2006/9/30 11:00:44
為Web頁面及其控件保持狀態(tài)信息是非常有必要的。然而,由于Web應用程序創(chuàng)建于HTTP協(xié)議的頂層,這是一個無狀態(tài)的協(xié)議,因此,保持狀態(tài)信息則變得非常困難。為了解決這個問題,ASP.net 2.0技術(shù)提供了多種解決方案,例如,利用Session、Cookie、視圖狀態(tài)、控件狀態(tài)、隱藏域、查詢字符串、個性化用戶配置(Profile)等等。對于利用ASP.NET 2.0技術(shù)創(chuàng)建服務器控件而言,保持狀態(tài)信息也是非常重要的,其主要解決途徑是利用視圖狀態(tài)和控件狀態(tài)。本文詳細講解了視圖狀態(tài)(ViewState)的基本知識,并通過典型應用介紹視圖狀態(tài)的應用方法。

  視圖狀態(tài)概述

  視圖狀態(tài)是一項非常重要的技術(shù),它能使得頁面和頁面中的控件在從服務器到客戶端,再從客戶端返回的往返過程中保持狀態(tài)信息。這樣就可以在Web這種無狀態(tài)的環(huán)境之上創(chuàng)建一個有狀態(tài)并持續(xù)執(zhí)行的頁面效果。本節(jié)主要介紹有關(guān)視圖狀態(tài)的運行機制、應用方法、存儲的數(shù)據(jù)類型、性能和安全性、視圖狀態(tài)分塊(這是 ASP.NET 2.0的新特性)和優(yōu)缺點等內(nèi)容。

  (1)運行機制

  視圖狀態(tài)的具體運行過程為:每當用戶請求某個.aspx頁面時,.NET框架首先把相關(guān)控件的狀態(tài)數(shù)據(jù)序列化成一個字符串,然后,將其做為名為__VIEWSTATE的隱藏域的Value值發(fā)送到客戶端。如果頁面是第一次被請求,那么服務器控件也將是被第一次執(zhí)行時,名為__VIEWSTATE的隱藏域中只包含控件的默認信息,通常為空或者 null。在隨后的回送事件中,ViewState中就保存了服務器控件在前面回送中可用的屬性狀態(tài)。這樣服務器控件就可以監(jiān)視在當前被處理的回送事件發(fā)生之前的狀態(tài)了。這些過程是由.NET框架負責的,對用戶來說是執(zhí)行.aspx頁面就有了持續(xù)執(zhí)行的效果。

  (2)存儲的數(shù)據(jù)類型

  視圖狀態(tài)可以存儲多種類型的數(shù)據(jù),并且為了提高運行效率,視圖狀態(tài)自身還包括一套已經(jīng)優(yōu)化的針對常用類型的序列化方式。視圖狀態(tài)序列化方式默認支持的數(shù)據(jù)類型包括以下幾種:String、Int32、Unit、Color、Array、ArrayList、HashTable和自定義類型轉(zhuǎn)換器 TypeConverter。

  視圖狀態(tài)已經(jīng)為Array、ArrayList和包含上面列出類型的HashTable對象進行了優(yōu)化。因此,當在控件中使用視圖狀態(tài)時,應該試著限定于使用以上簡單數(shù)據(jù)類型,以及經(jīng)過優(yōu)化的類型。在此,需要重點說明一下自定義類型轉(zhuǎn)換器 TypeConverter,它提供了一種將值的類型轉(zhuǎn)換為其他類型以及訪問標準值和子屬性的統(tǒng)一方法。例如,可以利用TypeConverter將字符串轉(zhuǎn)換為數(shù)值,或者將數(shù)值轉(zhuǎn)換為字符串。如果沒有類型轉(zhuǎn)換器,那么頁面框架會使用.NET框架提供的二進制序列化功能來序列化對象,這個過程是非常耗費資源的。

  (3)性能和安全性

  使用視圖狀態(tài)時,對象必須先序列化,然后再通過回傳進行反序列化。因此,我們必須了解有關(guān)ViewState性能的內(nèi)容。默認情況下,控件的ViewState將被啟用,如果不需要使用ViewState,最好還是將它關(guān)閉。以下情況將不再需要ViewState:(1)控件未定義服務器端事件(這時的控件事件均為客戶端事件且不參加回送的);(2)控件沒有動態(tài)的或數(shù)據(jù)綁定的屬性值。關(guān)閉視圖狀態(tài)的方法是將控件的EnableViewState的值設置為"false",即EnableViewState="false"。

  默認情況下,視圖狀態(tài)的有關(guān)內(nèi)容在編譯運行發(fā)送給客戶端時,讀者將在頁面的HTML代碼中看到__VIEWSTATE隱藏域內(nèi)容。這是一些沒有意義的字符串,是.NET框架通過Base64位編碼對相關(guān)內(nèi)容編碼的結(jié)果。它們是通過明文方式在客戶端和服務器端之間往返傳送。在某些情況下,例如涉及密碼、賬號、連接字符串等敏感內(nèi)容時,使用默認方式是很不安全的。為此,.NET框架為ViewState提供了兩種安全機制:

  · 校驗機制:

  可以通過設置EnableViewStateMAC

下一頁
返回列表
返回首頁 主站蜘蛛池模板: 久久久久亚洲av片无码| 伊人成影院九九| www亚洲精品| 大胸妈妈的朋友| 中国猛少妇色XXXXX| 日韩精品中文字幕在线| 亚洲日韩精品无码AV海量| 男女一进一出无遮挡黄| 四虎影视免费永久在线观看| 国产a免费观看| 国产精品无圣光一区二区| heyzo北条麻妃久久| 成人综合在线视频| 久久亚洲欧美国产精品| 最近中文字幕免费版在线3| 亚洲成人在线电影| 爱豆传媒视频在线网址最新| 午夜影视在线观看| 草久在线观看视频| 国产成人爱片免费观看视频| 18美女扒开尿口无遮挡| 在线观看亚洲免费视频| 一区二区三区免费视频观看| 推油少妇久久99久久99久久| 久久国产劲暴∨内射新川| 最近中文字幕高清中文字幕电影二| 亚洲日韩精品无码专区网址| 狠狠色丁香婷婷| 免费国产成人午夜电影| 综合网日日天干夜夜久久| 国产一区二区三区无码免费| 高h视频在线免费观看| 国产日产一区二区三区四区五区 | 欧美综合婷婷欧美综合五月| 人妻精品久久久久中文字幕69 | 亚欧色一区w666天堂| 欧美妇性猛交视频| 亚洲成人网在线观看| 欧美黑人巨大xxxxx视频| 亚洲色大成网站www永久男同| 男男暴菊gay无套网站|