当页面运行至SaveState阶段时,将调用其自身SaveAllState()方法,在这个方法内部,做了两件事,第一件事就是保存控件状态,即ControlState,第二件事就是保存控件视图状态,即ViewState。ControlState我们放到以后再说,今天说说ViewState,在SaveAllState()这个方法内部,调用控件的SaveViewStateRecursive()方法,在这个方法的内部,调用控件的SaveViewState方法,下面列出该方法的源码:

 1Page对象在SaveState阶段都做了什么?        // Answer any state this control or its descendants want to save on freeze.
 2Page对象在SaveState阶段都做了什么?        // The format for saving is Triplet(myState, ArrayList childIDs, ArrayList childStates),
 3Page对象在SaveState阶段都做了什么?        // where myState or childStates and childIDs may be null.
 4        }

第5行代码,需要引起我们的注意,flags[disableViewState]和控件的EnableViewState属性想对应。
下边用一个简单的示例,来描述一下页面是如何递归保存其内部控件的视图状态:

上边的代码列出了一个简单页面和其对应的cs页面代码。
这个页面对应的控件树为:
Page对象在SaveState阶段都做了什么?

下边列出Page、HtmlForm、Literal这三个主要对象的顺序图:

Page对象在SaveState阶段都做了什么?

相关文章: