ViewState 的保存和回复 解释(摘抄asp.net本质论)

页面的处理过程中,按照从先到后,页面的处理被分成了很多步骤,这些步骤通过事件 被表现了出来。

在页面的PervRenderComplete事件之后,页面将进行视图状态的保存工作,通过调用SaveViewState 方法, 页面可以获得需要通过视图状态保存的数据对象,然后将这个对象进行

格式化处理,保存到持久化的介质中。,例如 隐藏域,SaveStateComplete 事件在将页和页上控件的视图状态保存到持久介质之后发生。这是在页被呈现到浏览器之前引发的最后一个

事件。 默认情况下,这个对象被序列化之后,以base64 的形式生成到HTML页面的隐藏域中。

当请求重新发送到服务器的时候,服务器会创建一个新的页面对象处理请求,在页面处理的开始阶段,在页面的InitComplete事件之后,页面将从请求中获取通过隐藏域返回的Base64信息,

通过反序列化之后,得到上次页面对象所保存的数据对象。这个对象通过LoadViewState 方法传回页面对象,实现状态的恢复。

在第一次对页面进行Get请求的时候,显然没有隐藏域中的数据,也就不会调用LoadViewState方法了。

页面的IsPostBack 属性,就是通过检查请求中是否包含了 __ViewState的请求参数来判断 当前请求是否为回发操作的。

在Control控件中定义了保存和恢复视图状态的方法,这些方法一般为protected,一般用于自定义控件开发中使用。在页面中同样使用这些方法完成视图状态的管理。

protected virtual Object SaveViewState()

protected virtual void LoadViewState(Object savedStated)

作为Control的一个子类,页面对象同样通过这两个方法处理整个页面的视图状态管理。

在页面对象中提供了视图状态对象进行持久化处理的两个方法,一个用于将对象保存,一个用于获取

protected override void SavePageStateToPersistenceMedium(Object viewState)

protected override Object LoadPageStateFromPersistenceMedium()

原文地址:https://www.cnblogs.com/honkcal/p/2381830.html