一、ViewState的原理


1.浏览器请求Default.aspx页面

2.在服务器端 发现创建的ViewState 这个时候 会自动创建一个名字叫做__VIEWSTATE(双下滑线 全部是大写)
的隐藏域 其隐藏域的值经过base64加密以后返回到浏览器端这一加密过程在页面生命周期
的SaveState事件中的SaveAllState方法中完成


3.当浏览器提交表单的时候 将__VIEWSTATE的隐藏域也一起提交到服务端 这个时候 页面生命周期的ReadState事件
的ReadAllState方法会将加密后的值反base64解密 最后将值赋值给名字叫做name的ViewState

4.最后来操作ViewState中的值

 

 

 

二、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 才是持续的。

 

 

 

参考资料:    ViewState的用法       http://www.studyofnet.com/news/311.html