代码之家  ›  专栏  ›  技术社区  ›  spa

为什么OnLoad/CreateChildControls在回发时更改订单?

  •  9
  • spa  · 技术社区  · 15 年前

    Web部件生命周期是 described 这样地:

    页面加载

    1. 构造函数
    2. 奥尼特
    3. 重载
    4. 如果Web部件可连接,则调用ConnectionConsumer方法
    5. 创建子控件…

    在第一次回发时(回发单击 处理程序通过公共设置视图状态 财产)

    1. 构造函数
    2. 奥尼特
    3. 创建子控件
    4. 重载
    5. 回发点击处理…

    在第二次回发时(回发单击 处理程序通过公共设置视图状态 属性)

    1. 构造函数
    2. 奥尼特
    3. 加载视图状态
    4. 创建子控件
    5. 重载…

    如您所见,OnLoad和CreateChildControls更改了它们的顺序。这在我的代码中引入了一些困难,因为我需要收集我在onload元素中所做的各种数据。

    是否有任何理由在后退后阶段更改订单?

    2 回复  |  直到 15 年前
        1
  •  14
  •   Robba    15 年前

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

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

    如果没有回发,也不需要设置值,因此调用EnsureChildControls将等待,直到框架确实需要这些控件为止。这恰好在onload和onprerender之间。

        2
  •  -4
  •   Colin    15 年前

    这不应该发生,你确定吗?是否没有其他线程在运行,使它看起来好像顺序已更改?

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