【问题标题】:Why does OnLoad / CreateChildControls order change at postback?为什么 OnLoad / CreateChildControls 订单在回发时会发生变化?
【发布时间】:2009-10-30 07:20:49
【问题描述】:

Web 部件生命周期是 described,如下所示:

页面加载

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

第一次回发(回发点击 处理程序通过公共设置 ViewState 属性)

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

在第二次回发(回发点击 处理程序通过公共设置 ViewState 属性)

  1. 构造函数
  2. OnInit
  3. 加载视图状态
  4. CreateChildControls
  5. 加载中 ...

您可以看到 OnLoad 和 CreateChildControls 改变了它们的顺序。这给我的代码带来了一些困难,因为我需要收集以前在 OnLoad 元素中执行的各种数据。

回发阶段订单发生变化有什么原因吗?

【问题讨论】:

    标签: asp.net sharepoint moss


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      那不应该发生,你确定吗?是否没有其他线程正在运行,这可能会使订单看起来好像发生了变化?

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

      【讨论】:

      • 这不是我自己想出来的。它在各种博客文章中进行了描述(请参阅问题中的链接)。我用调试器验证了它。
      猜你喜欢
      • 1970-01-01
      • 2020-08-25
      • 2013-07-02
      • 2015-09-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-09
      相关资源
      最近更新 更多