ViewState彻底研究

1.为什么需要产生viewstate概念?

2.使用demo了解asp.net page的life cycle,进而了解viewstate工作原理?

 

 


 

 

1.为什么需要产生viewstate概念?

 

当 classic ASP 中的表单被提交时,所有的表单值都会被清空。设想一下,您提交了一张带有大量信息的表单,而服务器返回了一个错误。您将不得不返回表单,然后更正其中的信息。您点击后退按钮,然后会发生什么呢... 所有的表单值都被清空了,而您将不得不重新开始所有的一切。站点不会维持您的 ViewState。

当 ASP .NET 中的表单被提交时,表单会随所有表单值一同重新出现。如何做到的呢?这是由于 ASP .NET 维持了您的 ViewState。ViewState 会在页面被提交到服务器时指示其状态。通过在每张页面中的一个 <form runat="server"> 控件中放置一个隐藏域,我们就可以定义页面的状态了。源代码可能类似这样:

 

 

维持 ViewState 是 ASP.NET Web 表单的默认设置。如果您不希望维持 ViewState,请在 .aspx 页面的顶部包含指令: <%@ Page EnableViewState="false" %>,或为任意控件添加属性:EnableViewState="false"。

 

 


 

2.使用demo了解asp.net page的life cycle,进而了解viewstate工作原理?

 

demo的前台页面:

 

 

后台代码:

 

 

当点击Change Message按钮时,将显示Goodbye, Everyone!,点击Empty Postback按钮时,依旧显示Goodbye, Everyone!字符串。整个的过程如下:

然后跟踪整个asp.net page的生命周期了解整个的这个过程:

 

 

下面分别介绍上面的几个过程:

  •  Instantiation:当以个asp.net页面第一次被访问的时候,asp.net引擎(ASP.NET engine )自动编译这个页面,生成一个类。由于控件的继承关系,将生成所谓的“control hierarchy ”。下面将会详细介绍如何去查看生成的类文件。如下图所示:
  • Initialization:当页面的control hierarchy建立之后,调用page的init方法。
  • Load View State:如果页面是postback的,然后the view state data that had been saved from the previous page visit is loaded and recursively populated into the control hierarchy of the Page.
  • Load Postback Data:如果页面时postback的,那么将会加载postback data。
  • Load:调用page类的Page_Load方法
  • Raise Postback Event:这里将调用例如:button click等事件
  • Save View State:调用控件的SaveViewState method,生成一个base-64 encoded string来存储当前状态,服务器会将这个base-64 encoded string会发到客户端,但是view state is persisted in the page as a hidden form field。
  • Render:生成html,将html发送都客户端程序


 

本博客中的文章均是在学习和编码过程中的总结,其中难免存在错误之处,给您的带来的不便尽请谅解,同时欢迎您提出意见。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值