浏览器与服务器交互信息(序列化与发序列化) ViewState

本篇来解释上篇博文中用户输入数据没有消失的问题。(由于http协议的无状态性使得每次页面请求都会重新创建所有控件。即所有的数据都将不复存在)

先来看一下asp.net页面的生命周期

ASP.NET页面的生命周期:(详见ASP.Net4.0权威指南第1章第3节)

1.浏览器提出请求

2.页面框架初始化

    此阶段开始创建ASP.net页面,产生你在.aspx页面里面用标签定义的所有控件,此外,如果页面不是第一次被请求,即只是一次会是回送,ASP.net将反序列化状态视图信息并把它们应用到所有的控件上,page_Init事件在这个阶段被触发。

   Page_Init在所有外观设置后引发,使用该事件来读取或初始化控件属性。

3.用户代码初始化

4.验证

5.事件处理

6.呈现

7.清除

再看每次请求页面时发生的事情:

客户每次请求页面时——通过最初请求或者回送——所发生的事情。

由于http协议的无状态性使得每次页面请求都会重新创建所有控件。即所有的数据都将不复存在,那我们那什么来交互呢?

ASP.NET 2.0提供了视图状态(ViewState)这一项非常重要的技术,它能使得页面和页面中的控件在从服务器到客户端,再从客户端返回的往返过程中保持状态信息。这样就可以在Web这种无状态的环境之上创建一个有状态并持续执行的页面效果。

视图状态的具体运行过程为:每当用户请求某个.aspx页面时,.NET框架首先把相关控件的状态数据序列化成一个字符串,然后,将其做为名为__VIEWSTATE的隐藏域的Value值发送到客户端。如果页面是第一次被请求,那么服务器控件也将是被第一次执行时,名为__VIEWSTATE的隐藏域中只包含控件的默认信息,通常为空或者null。在随后的回送事件中,ViewState中就保存了服务器控件在前面回送中可用的属性状态。这样服务器控件就可以监视在当前被处理的回送事件发生之前的状态了。这些过程是由.NET框架负责的,对用户来说是执行.aspx页面就有了持续执行的效果。(使用视图状态时,对象必须先序列化,然后再通过回传进行反序列化。

所以上篇博文里的数据为何存在就得以解释了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值