码迷,mamicode.com
首页 > Web开发 > 详细

.NET 原理之 ViewState

时间:2015-04-14 21:28:59      阅读:123      评论:0      收藏:0      [点我收藏+]

标签:

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中取得的值赋给它,所以浏览器记住了上一次的值,看起来是"有状态的"。
技术分享
 
 技术分享技术分享技术分享
技术分享

.NET 原理之 ViewState

标签:

原文地址:http://www.cnblogs.com/luoyangcn/p/4426098.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!