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无套网站|