我有一个复合服务器控件,在其中我实现了CreateChildControls。此控件是一个网格,它还包括分页和排序控件。
当单击排序链接时,首先调用CreateChildControls,然后调用事件处理程序,然后从事件处理程序再次调用CreateChildControls,以便按照新的排序顺序重新生成控件。
当回发由控件事件处理程序触发时,有没有办法跳过CreateChildControls?
这是可能的吗,或者我必须在事件处理程序之前通过CreateChildControls,这样asp.net才能将事件挂钩到现有的控件?
发布于 2012-12-28 20:00:33
我在写这个问题的时候并不知道,但这实际上是自定义控件自然生命周期的一部分。
每次调用EnsureChildControls()
时都会调用CreateChildControls()
。诀窍是在对CreateChildControls()
的第一次调用结束时设置ChildControlsCreated
属性,这样整个过程就不会多次发生。
发布于 2016-09-09 20:36:24
我有类似的情况,但我有两件事要做:我正在加载控件,然后我根据用户之前的选择显示信息。当用户更改下拉列表或单击按钮时,页面将重新加载,并且他们的选择将添加到查询字符串中。所以,我的解决方案是:
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使用查询字符串中的值来显示大量数据。这样,我就不会对当前值调用ShowProcedure。
https://stackoverflow.com/questions/13700027
复制相似问题