|
狀態(tài)時某一類型的數(shù)據(jù)在一定時期內(nèi)保持活躍的信息。這里說的一定時期可以使整個應(yīng)用程序的生命周期,可以使用戶操作程序的時間,當然也可以是單個頁面的生命周期等。
為了解決傳統(tǒng)Web編程中固有的限制,ASP.NET提供了按頁面保留數(shù)據(jù)和在整個應(yīng)用程序范圍內(nèi)保留數(shù)據(jù)的功能,這些具體功能如下:(其中1到5是以不同方式將數(shù)據(jù)存儲到客戶端上,6到8是將數(shù)據(jù)存儲到服務(wù)器上的內(nèi)存中)
一、視圖狀態(tài)
ViewState屬性提供一個字典對象,用于在對同一頁的多個請求之間保留值。它是頁用來在往返行程之間保留頁和控件屬性值的默認方法。
當將頁面回發(fā)至服務(wù)器時,頁面會在頁的初始化階段分析視圖狀態(tài)字符串,和原頁中的屬性信息。也可以使用視圖狀態(tài)來存儲值。
視圖狀態(tài)提供了特定ASP.NET頁的狀態(tài)信息。如果需要在多個頁上使用信息,或者如果需要在訪問網(wǎng)站時保留信息,則應(yīng)當使用另一個方法(如應(yīng)用程序狀態(tài)、會話狀態(tài)或個性化設(shè)置)來維護狀態(tài)。
注意:視圖狀態(tài)信息將序列化為XML,然后使用Base64編碼進行編碼,這將生成大量的數(shù)據(jù)。將頁回發(fā)到服務(wù)器時,視圖狀態(tài)的內(nèi)容將作為頁面回發(fā)信息的一部分發(fā)送。如果視圖狀態(tài)包含大量信息,則會影響頁的性能。
在某些情況下(如數(shù)據(jù)驅(qū)動頁在每次回發(fā)時從數(shù)據(jù)存儲區(qū)進行刷新),應(yīng)當關(guān)閉視圖狀態(tài)以移除由數(shù)據(jù)控件(如GridView控件)生成的大量隱藏字段。
換句話說,我們要盡量避免在前臺使用視圖狀態(tài),如果可能的話,可以用input的控件,這樣可以提高網(wǎng)站的性能。
存儲在視圖狀態(tài)中的數(shù)據(jù)類型如下:字符串、整數(shù)、布爾值、Array對象、Arraylist對象、哈希表、自定義類型轉(zhuǎn)換器。
使用視圖狀態(tài)具有以下3個優(yōu)點:
一、耗費的服務(wù)器資源較少(與Application、Session相比):因為,視圖狀態(tài)數(shù)據(jù)都寫入了客戶端計算機中。
二、易于維護:在默認情況下.NET系統(tǒng)自動啟用對控件狀態(tài)數(shù)據(jù)的維護。
三、增強的安全功能:視圖狀態(tài)中的值經(jīng)過哈希計算和壓縮,并且針對Unicode實現(xiàn)進行編碼,其安全性要高于使用隱藏域。
使用視圖狀態(tài)具有以下3個缺點:
一、性能注意事項:如果存儲較大的值,用戶顯示頁和發(fā)送頁時的速度減慢。
二、設(shè)備限制:移動設(shè)備可能沒有足夠的內(nèi)存容量來存儲大量的視圖狀態(tài)數(shù)據(jù)。
三、潛在的安全風(fēng)險:視圖狀態(tài)存儲在頁上的一個或多個隱藏域中。雖然視圖狀態(tài)以哈希表格式存儲數(shù)據(jù),但它可以被篡改。
加密視圖狀態(tài):在@ Page指令中,將ViewStateEncryptionMode屬性設(shè)置為
<% @Page ViewStateEncryptionMode="Always"... %>
NET技術(shù):ASP.NET的狀態(tài)管理,轉(zhuǎn)載需保留來源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。