为什么OnLoad / CreateChildControls命令在回发时更改?

时间:2009-10-30 07:20:50

标签: asp.net sharepoint moss

网络部件生命周期为described,如下所示:

  

页面加载

     
      
  1. 构造
  2.   
  3. 的OnInit
  4.   
  5. 的OnLoad
  6.   
  7. 如果Web部件可连接,则调用ConnectionConsumer方法
  8.   
  9. CreateChildControls ...
  10.         

    On 1st Postback(PostBack点击   handler通过public设置ViewState   属性)

         
        
    1. 构造
    2.   
    3. 的OnInit
    4.   
    5. 的CreateChildControls
    6.   
    7. 的OnLoad
    8.   
    9. PostBack点击处理...
    10.         

      On 2nd Postback(PostBack点击   handler通过public设置ViewState   属性)

           
          
      1. 构造
      2.   
      3. 的OnInit
      4.   
      5. LoadViewState
      6.   
      7. 的CreateChildControls
      8.   
      9. OnLoad ......
      10.   

正如您所看到的,OnLoad和CreateChildControls会更改其顺序。这在我的代码中引入了一些困难,因为我需要收集我以前在OnLoad元素中执行的各种数据。

在退回阶段是否有任何理由改变订单?

2 个答案:

答案 0 :(得分:14)

只要框架(或您自己)调用EnsureChildControls方法,就会调用CreateChildControls。只要您需要子控件,就应该调用此方法。

在框架的情况下,它想要在OnInit和OnLoad之间设置发布值(以便您可以在OnLoad期间访问值)。因为它需要控件来执行此操作,所以它将为您调用EnsureChildControls。

如果没有回发,则也不需要设置值,因此对EnsureChildControls的调用将等到框架确实需要控件的时间。这恰好发生在OnLoad和OnPreRender之间。

答案 1 :(得分:-4)

那不应该发生,你绝对肯定吗?是否没有其他线程运行可能会使订单看起来好像已经改变了?

这毕竟只是ASP.NET,一个由计算机执行的程序(意思是它应该总是做同样的事情,不像一个人)。