程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> ASP.NET >> 關於ASP.NET >> ASP.NET 2.0的控件狀態和視圖狀態探討

ASP.NET 2.0的控件狀態和視圖狀態探討

編輯:關於ASP.NET

基本概念

控件狀態-為了讓控件正常工作,有時需要存儲控件狀態數據。例如,如果 編寫了一個自定義控件,其中具有顯示不同信息的不同選項卡,為使該控件如預 期一樣工作,控件需要知道在往返過程中選擇的是哪個選項卡。ViewState 屬性 可用於此目的,但開發人員可能在頁級別關閉了視圖狀態,從而有效地中斷控件 。為解決此問題,ASP.NET 頁框架在 ASP.NET 2.0 版中公開了一種稱為控件狀 態的新功能。

ControlState 屬性允許保持特定於控件的屬性信息,不像 ViewState 屬性 一樣可以關閉。若要使用控件狀態,控件必須在初始化過程中調用 RegisterRequiresControlState 方法,然後重寫 SaveControlState 和 LoadControlState 方法。

視圖狀態-視圖狀態是 ASP.NET 頁框架默認情況下用於保存往返過程之間的 頁和控件值的方法。當呈現頁的 HTML 形式時,需要在回發過程中保留的頁的當 前狀態和值將被序列化為 Base64 編碼的字符串,並輸出到視圖狀態的隱藏字段 中。通過實現自定義的 PageStatePersister 類以存儲頁數據,您可以更改默認 行為並將視圖狀態存儲到另一個位置(如 SQL Server 數據庫)。有關將頁狀態 存儲到流上而不是隱藏的頁字段中的示例,請參見 視圖狀態持久性機制的示例 。

您可以通過使用頁的 ViewState 屬性將往返過程中的數據保存到 Web 服務 器來利用自己的代碼訪問視圖狀態。ViewState 屬性是一個包含密鑰/值對(其 中包含視圖狀態數據)的字典。

各自的優勢與劣勢

視圖狀態

使用視圖狀態的優點:

·不需要任何服務器資源 視圖狀態包含在頁代碼內的結構中。

·實現簡單 視圖狀態無需使用任何自定義編程。默認情況下對控件啟用狀態 數據的維護。

·增強的安全功能 視圖狀態中的值經過哈希計算和壓縮,並且針對 Unicode 實現進行編碼,其安全性要高於使用隱藏域。

使用視圖狀態的缺點

·性能注意事項 由於視圖狀態存儲在頁本身,因此如果存儲較大的值,用戶 顯示頁和發送頁時的速度可能會減慢。尤其是對移動設備,其帶寬通常是有限的 。

·設備限制 移動設備可能沒有足夠的內存容量來存儲大量的視圖狀態數據。

·潛在的安全風險 視圖狀態存儲在頁上的一個或多個隱藏域中。雖然視圖狀 態以哈希格式存儲數據,但它可以被篡改。如果直接查看頁輸出源,可以看到隱 藏域中的信息,這導致潛在的安全性問題。

控件狀態

使用控件狀態的優點:

·不需要任何服務器資源 默認情況下,控件狀態存儲在頁上的隱藏域中。

·可靠性 因為控件狀態不像視圖狀態那樣可以關閉,控件狀態是管理控件的 狀態的更可靠方法。

·通用性 可以編寫自定義適配器來控制如何存儲控件狀態數據和控件狀態數 據的存儲位置。

使用控件狀態的缺點:

·需要一些編程 雖然 ASP.NET 頁框架為控件狀態提供了基礎,但是控件狀 態是一個自定義的狀態保持機制。為了充分利用控件狀態,您必須編寫代碼來保 存和加載控件狀態。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved