我有一个复合服务器控件,我在其中实现CreateChildControls。 此控件是一个网格,还包括分页和排序控件。
单击排序链接时,首先调用CreateChildControls,然后调用事件处理程序,再从事件处理程序调用CreateChildControls,以便使用新的排序顺序重建控件。
当控件事件处理程序触发回发时,有没有办法跳过CreateChildControl?
这是否可能,或者我必须在事件处理程序之前通过CreateChildControls,因此asp.net可以将事件连接到现有控件吗?
答案 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。