今天就來(lái)說(shuō)一下ViewState的運(yùn)行原理
ViewState和Cookie一樣 是一種客戶端的狀態(tài)保持機(jī)制 和Session不同 Session是基于服務(wù)端的狀態(tài)保持機(jī)制
值得一提的是 ViewState是.Net中特有的特有的狀態(tài)保持機(jī)制 在其他的語(yǔ)言中是沒(méi)有的!!
ViewState不是Session一樣所有數(shù)據(jù)類型都支持 ViewState只能支持
String Intger Boolean Array ArrayList Hashtable
當(dāng)關(guān)閉頁(yè)面的時(shí)候ViewState也就不存在了 所以 ViewState 也是保存在瀏覽器緩存中的
ViewState的作用域是“頁(yè)面級(jí)的”
怎么理解這句話呢 ? 我來(lái)舉一個(gè)例子 您就明白了
假如我在Default.aspx這個(gè)頁(yè)面是創(chuàng)建了個(gè)ViewState 那么這個(gè)ViewState的值只能在Default.aspx這個(gè)頁(yè)面中使用
其他頁(yè)面就不能使用了 就類似于一個(gè)全局變量
要說(shuō)ViewState就不的不說(shuō)一下“隱藏域”
何為隱藏域?
簡(jiǎn)單的理解就是一個(gè)隱藏的區(qū)域 在頁(yè)面之間傳遞值的時(shí)候 用戶看不到隱藏域的存在
也可以理解為一個(gè)變量 但是這個(gè)變量用戶在界面上看不到的!!
使用VIewState的時(shí)候 就必須要借助于“隱藏域” 才能實(shí)現(xiàn)
好了 下面就來(lái)說(shuō)一下ViewState的原理吧
先創(chuàng)建ViewState 創(chuàng)建ViewState非常的簡(jiǎn)單
這里必須要注意的時(shí)候 要是有ViewState 就必須加上 runat="server" 這句話 因?yàn)橹挥悬c(diǎn)擊“提交”的時(shí)候(提交表單)隱藏域才能起作用 否則就和普通的HTML標(biāo)簽一樣
來(lái)看原理圖
光說(shuō)不練假把式 來(lái)看一下產(chǎn)生的 __VIEWSTATE(瀏覽器版本IE9)
我使用ViewStateDecoder2(ViewState查看器)來(lái)看一下值
以上就是我對(duì)ViewState的理解 由于個(gè)人能力有限 肯定有不對(duì)的地方 還請(qǐng)各位牛人指出 以便我不斷學(xué)習(xí) 小弟萬(wàn)分萬(wàn)分感謝?。。。。?!
聯(lián)系客服