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

spa*_*spa 10 asp.net sharepoint moss

Web部件生命周期描述如下:

在页面加载

  1. 构造函数
  2. 的OnInit
  3. 负载
  4. 如果Web部件是可连接的,则调用ConnectionConsumer方法
  5. CreateChildControls ......

On 1st Postback(PostBack点击处理程序通过公共属性设置ViewState)

  1. 构造函数
  2. 的OnInit
  3. 的CreateChildControls
  4. 负载
  5. PostBack点击处理...

On 2nd Postback(PostBack点击处理程序通过公共属性设置ViewState)

  1. 构造函数
  2. 的OnInit
  3. LoadViewState
  4. 的CreateChildControls
  5. 负载 ...

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

在后期阶段是否有任何理由改变订单?

Rob*_*bba 15

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

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

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