1

我有一个复合服务器控件,我在其中实现了 CreateChildControls。此控件是一个网格,其中还包括分页和排序控件。

单击排序链接时,首先调用 CreateChildControls,然后调用事件处理程序,然后我再次从事件处理程序调用 CreateChildControls,以便使用新的排序顺序重建控件。

当回发由控件事件处理程序触发时,是否有任何方法可以跳过 CreateChildControls?

这甚至可能吗,还是我必须在事件处理程序之前通过 CreateChildControls,以便 asp.net 可以将事件连接到现有控件?

4

2 回答 2

3

我写这个问题的时候并不知道,但这实际上是自定义控件自然生命周期的一部分。

CreateChildControls()每次EnsureChildControls()被调用。诀窍是ChildControlsCreated在第一次调用结束时设置属性CreateChildControls(),因此整个过程不会发生多次。

于 2012-12-28T12:00:33.167 回答
0

我有类似的情况,但我有两件事要做:我正在加载控件,然后我根据用户之前的选择显示信息。当用户更改下拉列表或单击按钮时,将重新加载页面并将他们的选择添加到查询字符串中。所以,我的解决方案是这样的:

protected override void CreateChildControls()
{
    base.CreateChildControls();
    AddControls();
    if (Page.IsPostBack)
        return;
    ShowProcedure() // The time-intensive code that I don't want to call twice.
}

AddControls 填充控件,并启用回发选项。ShowProcedure 使用查询字符串中的值来显示大量数据。这样,我不会在 CURRENT 值上调用 ShowProcedure。

于 2016-09-09T12:36:23.730 回答