技术开发 频道

浅谈ASP.NET内部机制:ViewState本质

  2.为新建的对象加载旧对象的状态。

  只有这样我们才可以得到我们想要的数据C。我们来进一步看看内部机制。在每个请求结束时(简单的就可以认为在服务器把数据发送给我们之前,此时数据还在服务器),就会引发一些事件,调用一些方法:

  ·页面自动调用Controls集合中控件的SaveViewState方法,也就是迭代页面中所有控件,调用他们的SaveViewState方法,因为控件都是Control的子类,而Control类中有这个方法。

  ·每个控件的SaveViewState方法把控件的状态存储到一个对象中。

  ·页面获取每个控件的返回的那个保存状态的对象,然后用与对象有关的转换器把保存的状态的对象转换为字符串,然后把这些字符串表达式组合起来保存在一个隐藏字段中,隐藏字段名为:_VIEWSTATE.如下: 

<input type=”hidden” name=”__VIEWSTATE” id=”__VIEWSTATE” value=”/wEPDwULLTE3MDU5MjY
4MTkPZBYCAgMPZBYCAgEPFCsAAmRkFgZmD2QWAmYPDxYCHgRUZXh0BQ5QYXltZW50IE1ldGhvZGRkAgEPZB
YCZg8PDxYCHgtfIURhdGFCb3VuZGdkZGQCBw9kFgRmDw8PFgIfAWdkZGQCAg8PDxYCHwFnZGRkZJDAqbyjC
j4rjagRWSiVYTp7nQfM”
/>

  ·然后_VIEWSTATE隐藏字段就发送到了客户端,和页面数据一起。

  ·当页面回传到服务器,就发生下面的操作:

  页面字符串从_VIEWSTATE中得到字符串表达式。

  页面矿建解析字符串表达式

  页面框架使用与对象相关的类型转换器,根据字符串表达式重新创建状态对象。

  页面框架调用Controls集合中每个对象的LoadViewState方法加载之前的状态
 
  然后进行其他的处理。

  就这样,ASP.NET就在请求之间保存了状态。

  总结:大家可以这么认为:服务器端把页面中对象的状态序列化到客户端,然后下面再反序列化得到之前的状态。

0
相关文章