婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > asp.net中ViewState的用法詳解

asp.net中ViewState的用法詳解

熱門標簽:海東防封電銷卡 辦公用地圖標注網點怎么操作 云南外呼系統代理 聊城智能電銷機器人電話 安陸市地圖標注app 寧德防封版電銷卡 上海市三維地圖標注 西寧電銷外呼系統公司 南昌自動外呼系統線路

在web窗體控件設置為runat = "server",這個控件會被附加一個隱藏的屬性_ViewState,_ViewState存放了所有控件在ViewState中的狀態值。ViewState是一個名稱/值的對象集合。當請求某個頁面時,ASP.NET會把所有控件的狀態序列化成一個字符串,然后作為窗體的隱藏屬性送到客戶端,當客戶端吧頁面回傳時,ASP.NET分析回傳的窗體屬性,并賦給控件對應的值。

當我們在寫一個asp.net表單時, 一旦標明了 form runat=server ,那么,asp.net就會自動在輸出時給頁面添加一個隱藏域

input type="hidden" name="__VIEWSTATE" value="">

那么,有了這個隱藏域,頁面里其他所有的控件的狀態,包括頁面本身的一些狀態都會保存到這個控件值里面. 每次頁面提交時一起提交到后臺,asp.net對其中的值進行解碼,然后輸出時再根據這個值來恢復各個控件的狀態. 我們再看這個控件的value值,它可能類似如下的形式:Oz4+O2w8aTwxPjs+O2w8.... 很多人會認為這是加密的信息,其實不是, ms僅僅是給各個控件和頁面的狀態存入適當的對象里面,然后把該對象序列化, 最后再做一次base64編碼,直接賦值給viewstate控件.

一、ViewState的原理

1.瀏覽器請求Default.aspx頁面

2.在服務器端 發現創建的ViewState 這個時候 會自動創建一個名字叫做__VIEWSTATE(雙下滑線 全部是大寫)的隱藏域 其隱藏域的值經過base64加密以后返回到瀏覽器端這一加密過程在頁面生命周期的SaveState事件中的SaveAllState方法中完成

3.當瀏覽器提交表單的時候 將__VIEWSTATE的隱藏域也一起提交到服務端 這個時候 頁面生命周期的ReadState事件的ReadAllState方法會將加密后的值反base64解密 最后將值賦值給名字叫做name的ViewState

4.最后來操作ViewState中的值

二、ViewState的用法:

1.定義ViewState屬性

public int PageCount{
get{return (int)ViewState["PageCount"];}
set{ViewState["PageCount"]=value;}
}

2.使用ViewState的條件

如果要使用ViewState,則在ASPX頁面中必須要有一個服務器端窗體標記(form runat = "server">)。窗體字段是必須的,這樣包含ViewState信息的隱藏字段才能被傳回服務器。而且,該窗體還必須是服務器端的窗體,這樣在服務器上執行該頁面時,ASP.net頁面框架才能添加隱藏字段。

page的EnableViewState 屬性值為true
控件的EnableViewState 屬性值為 true

3.ViewState需要注意的地方

a. 當存在頁面回傳時,不需要維持控件的值就要把 ViewState 禁止。
b. ViewState的索引是大小寫敏感的。
c. ViewState不是跨頁面的。
d. 為了能保存在 ViewState中,對象必須是可流化或者定義了 TypeConverter。
e. 控件 TextBox 的 TextMode 屬性設置為 Password時,它的狀態將不會被保存在 ViewState 中,這應該是出于安全性的考慮。
f. 在頁面沒有回傳或重定向或在回傳中轉到(transfer)其他頁面時不要使用 ViewState。
g. 在動態建立控件時要小心它的 ViewState。
h. 當禁止一個程序的 ViewState 時,這個程序的所有頁面的 ViewState 也被禁止了。
i. 只有當頁面回傳自身時ViewState 才是持續的。

4.設置ViewState

ViewState可以在控件,頁,程序,全局配置中設置。缺省情況下 EnableViewState 為 true 。如果要禁止所有頁面 ViewState 功能,可以在程序配置中把 EnableViewState 設為 false 。

三、產生的 __VIEWSTATE如圖

使用ViewStateDecoder2(ViewState查看器)來看一下值

所以ViewState在安全性上面還是比較差,建議不要存放比較機密和敏感的信息,盡管ViewState可以加密,但是由于ViewState要保存在客戶端,天生就有安全性的隱患。

四、viewstate與session的對比

(1) session值是保存在服務器內存上,那么,可以肯定,大量的使用session將導致服務器負擔加重. 而viewstate由于只是將數據存入到頁面隱藏控件里,不再占用服務器資源,因此, 我們可以將一些需要服務器"記住"的變量和對象保存到viewstate里面. 而sesson則只應該應用在需要跨頁面且與每個訪問用戶相關的變量和對象存儲上.

(2) session在默認情況下20分鐘就過期,而viewstate則永遠不會過期.

但viewstate并不是能存儲所有的.net類型數據,它僅僅支持String、Integer、Boolean、Array、ArrayList、Hashtable 以及自定義的一些類型.

任何事物都有兩面性, 使用viewstate會增加頁面html的輸出量,占用更都的帶寬,這一點是需要我們慎重考慮的. 另外, 由于所有的viewstate都是存儲在一個隱藏域里面,用戶可以很容易的通過查看源碼來看到這個經過base64編碼的值.然后再經過轉換就可以獲取你存儲其中的對象和變量值。

您可能感興趣的文章:
  • asp.net 生成靜態時的過濾viewstate的實現方法
  • asp.net 去除viewstate
  • asp.net 禁用viewstate在web.config里
  • asp.net viewstate 回發機制
  • asp.net生成靜態后冗余代碼,去掉viewstate生成的代碼
  • 使用正則Regex來移除網頁的EnableViewState實現思路及代碼
  • 狀態保存機制之ViewState概述及應用
  • 禁止ViewState的3種解決方法
  • viewstate和datatable動態錄入數據示例
  • ASP.NET中控件的EnableViewState屬性及徹底禁用

標簽:青海 崇左 洛陽 平涼 汕尾 南寧 衢州 贛州

巨人網絡通訊聲明:本文標題《asp.net中ViewState的用法詳解》,本文關鍵詞  asp.net,中,ViewState,的,用法,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《asp.net中ViewState的用法詳解》相關的同類信息!
  • 本頁收集關于asp.net中ViewState的用法詳解的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 朝阳区| 高州市| 五寨县| 曲阜市| 眉山市| 曲周县| 广汉市| 河曲县| 寻甸| 台山市| 汾西县| 林甸县| 临颍县| 海宁市| 黔江区| 寿宁县| 江永县| 苍梧县| 南宫市| 阿巴嘎旗| 宁阳县| 株洲市| 九龙县| 汕头市| 合肥市| 东平县| 军事| 巨鹿县| 福贡县| 泗阳县| 贡嘎县| 通城县| 台南市| 敦化市| 通榆县| 峨边| 壶关县| 涿州市| 宿松县| 山西省| 轮台县|