CreateChildControls调用两次

时间:2012-12-04 09:48:47

标签: c# asp.net composite-controls

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

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

当控件事件处理程序触发回发时,有没有办法跳过CreateChildControl?

这是否可能,或者我必须在事件处理程序之前通过CreateChildControls,因此asp.net可以将事件连接到现有控件吗?

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分: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。