.NET 原理之 ViewState

1、从MSDN中我们可以知道一个页面生命周期大约可分为为:页请求、开始、初始化、加载、验证、回发事件处理、呈现、卸载这几个阶段。    
  HttpHandler是无状态的,aspx是高级的HttpHandler所以同样是无状态的,在aspx.cs中一般也不要用类字段。那么如果确实需要存储一些页面相关的变量怎么办呢?比如点击按钮“点击次数”加一。什么原理?
        查看页面的__VIEWSTATE,它是一个隐藏的input,使用ViewStateDecoder2.0.exe查看内容发现其中有“点击次数”对应的值。每次页面渲染生成html的时候,asp.net把ViewState中的值进行编码处理( Base64)序列化为__VIEWSTATE这样一个隐藏字段放到html中,下次再次提交的时候把__VIEWSTATE提交,服务器把__VIEWSTATE反序列化填充到ViewState属性中。其实就是把浏览器端当成“数据暂存”场所。反编译看看Label的Text实现。l 除了ViewState属性,还有哪些数据会放到__VIEWSTATE中?所有在cs代码中修改的值,比如给DataSource赋值的,比如Label的Text是没有放到__VIEWSTATE的,但是代码中给Text属性赋值就会被放到__VIEWSTATE中了。所以__VIEWSTATE是用来盛放“本次修改的内容”供“下次请求”还原现场使用,把Http模拟成了有状态。
 
2、从Label反编译来看,Label的文本赋值是从上一次请求的ViewState中取得的值赋给它,所以浏览器记住了上一次的值,看起来是"有状态的"。
 
 
posted @ 2015-04-14 21:19  落日云烟  阅读(421)  评论(0编辑  收藏  举报