欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

ASP.Net原理篇之ViewState

程序员文章站 2022-09-11 17:20:08
今天就来说一下viewstate的运行原理 viewstate和cookie一样 是一种客户端的状态保持机制 和session不同 session是基于服务端的状态保持机制 值得一提的是 views...

今天就来说一下viewstate的运行原理

viewstate和cookie一样 是一种客户端的状态保持机制 和session不同 session是基于服务端的状态保持机制
值得一提的是 viewstate是.net中特有的特有的状态保持机制 在其他的语言中是没有的!!

viewstate不是session一样所有数据类型都支持 viewstate只能支持
string intger boolean array arraylist hashtable

当关闭页面的时候viewstate也就不存在了 所以 viewstate 也是保存在缓存中的

viewstate的作用域是“页面级的”
怎么理解这句话呢 ?  我来举一个例子  您就明白了  
假如我在default.x这个页面是创建了个viewstate 那么这个viewstate的值只能在default.aspx这个页面中使用
其他页面就不能使用了  就类似于一个全局变量


要说viewstate就不的不说一下“隐藏域”
何为隐藏域?
简单的理解就是一个隐藏的区域 在页面之间传递值的时候 用户看不到隐藏域的存在
也可以理解为一个变量 但是这个变量用户在界面上看不到的!!

使用viewstate的时候 就必须要借助于“隐藏域” 才能实现

好了 下面就来说一下viewstate的原理吧
先创建viewstate 创建viewstate非常的简单

 ASP.Net原理篇之ViewState

这里必须要注意的时候 要是有viewstate 就必须加上 runat="server" 这句话 因为只有点击“提交”的时候(提交表单)隐藏域才能起作用 否则就和普通的html标签一样

 

 ASP.Net原理篇之ViewState

来看原理图
ASP.Net原理篇之ViewState
下面 我来简单的介绍一下viewstate的原理
1.浏览器请求default.aspx页面
2.在服务器端 发现创建的viewstate 这个时候 会自动创建一个名字叫做__viewstate(双下滑线 全部是大写)
的隐藏域 其隐藏域的值经过base64以后返回到浏览器端这一加密过程在页面生命周期
的savestate事件中的saveallstate方法中完成
3.当浏览器提交表单的时候 将__viewstate的隐藏域也一起提交到服务端 这个时候 页面生命周期的readstate事件
的readallstate方法会将加密后的值反base64解密 最后将值赋值给名字叫做name的viewstate
4.最后来操作viewstate中的值


光说不练假把式  来看一下产生的 __viewstate(浏览器版本ie9)

 ASP.Net原理篇之ViewState

我使用viewstatedecoder2(viewstate查看器)来看一下值

ASP.Net原理篇之ViewState
看来之前说的是对的 至于为什么要加密 小弟还正在查资料中  请各位牛人们赐教。。。。。

以上就是我对viewstate的理解 由于个人能力有限 肯定有不对的地方 还请各位牛人指出 以便我不断学习 小弟万分万分感谢!!!!!!