我们知道,页面的每次回发,都少不了LoadState阶段,在这个阶段,我们调用页面的LoadAllState()方法下边我们看看这个方法的源码:

 1    }

在这个方法中,第3行,通过LoadPageStateFromPersistenceMedium()方法,得到一个Pair对象,Pair.First对应的是控件的ControState,这个我们放到以后再谈,Pair.Second对应控件的视图状态。第44行,调用控件的LoadViewStateRecursive方法,这个方法是递归载入控件视图状态的开始,下边我们列出这个方法的源代码:

 1 


在上边的源代码中,第11行,将传入的object对象转换成Pair或Triplet对象,具体转换成什么对象,和Control.SaveViewStateRecursive有直接的关系,对比着SaveViewStateRecursive方法的实现,要理解LoadViewStateRecursive很容易。我们这里暂且也Pair对象为例,我们在代码的30-31行能看到,Pair.First对应当前控件的视图状态,如果这个视图状态不为null,将调用控件的LoadViewState方法。在代码的第34-41行能看到,Pair.Second是当前控件的子控件的视图信息,通过LoadChildViewStateByID方法或LoadChildViewStateByIndex方法,将试图状态传递给子控件。在这两个方法内部,又会调用子控件的LoadViewStateRecursive方法,开始新一轮的循环。我们用下边一段简单的来做一个说明:


这段代码在页面的LoadState阶段,Page,HtmlForm,Literal这三个对象对应的顺序图为:

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

相关文章:

  • 2021-11-20
  • 2022-01-31
  • 2021-10-19
  • 2021-07-17
  • 2022-01-19
  • 2021-08-07
  • 2022-12-23
  • 2022-02-04
猜你喜欢
  • 2021-09-19
  • 2021-07-23
  • 2021-10-12
  • 2022-02-05
  • 2022-12-23
  • 2022-01-03
  • 2021-11-01
相关资源
相似解决方案