网络部件生命周期为described,如下所示:
页面加载
- 构造
- 的OnInit
- 的OnLoad
- 如果Web部件可连接,则调用ConnectionConsumer方法
- CreateChildControls ...
醇>On 1st Postback(PostBack点击 handler通过public设置ViewState 属性)
- 构造
- 的OnInit
- 的CreateChildControls
- 的OnLoad
- PostBack点击处理...
醇>On 2nd Postback(PostBack点击 handler通过public设置ViewState 属性)
- 构造
- 的OnInit
- LoadViewState
- 的CreateChildControls
- OnLoad ......
醇>
正如您所看到的,OnLoad和CreateChildControls会更改其顺序。这在我的代码中引入了一些困难,因为我需要收集我以前在OnLoad元素中执行的各种数据。
在退回阶段是否有任何理由改变订单?
答案 0 :(得分:14)
只要框架(或您自己)调用EnsureChildControls方法,就会调用CreateChildControls。只要您需要子控件,就应该调用此方法。
在框架的情况下,它想要在OnInit和OnLoad之间设置发布值(以便您可以在OnLoad期间访问值)。因为它需要控件来执行此操作,所以它将为您调用EnsureChildControls。
如果没有回发,则也不需要设置值,因此对EnsureChildControls的调用将等到框架确实需要控件的时间。这恰好发生在OnLoad和OnPreRender之间。
答案 1 :(得分:-4)
那不应该发生,你绝对肯定吗?是否没有其他线程运行可能会使订单看起来好像已经改变了?
这毕竟只是ASP.NET,一个由计算机执行的程序(意思是它应该总是做同样的事情,不像一个人)。