CreateChildControls方法ChildControls不要触发事件

时间:2011-03-22 08:05:43

标签: asp.net custom-controls

我创建了一个自定义Web控件。在CreateChildControls方法的控件中,我动态创建一个表添加行,其中包含一个ImageButton,我试图将事件附加到此ImageButton但事件永远不会触发???

我尝试使用Init方法也不起作用。代码在CreateChildControls

上是这样的
  1. 我创建了一个Panel。
  2. 我创建一个包含数据和图像按钮的表
  3. 我将此表添加到创建的面板
  4. 我将此Panel添加到Controls.Add方法。
  5. 我还观察到,如果我直接向Controls.Add()方法添加一个控件并附加一个事件,它可以正常工作。

    意思, 1.创建一个按钮附加事件处理程序 2.添加到Controls.Add()方法

    在执行上述操作时,它可以正常工作。只有孩子控制事件不被解雇是否有任何我想念的东西???

    提前致谢

1 个答案:

答案 0 :(得分:0)

我认为我遇到了与你相同的问题,但我非常接近解决方案,我只是不知道这是否是最好的解决方案。

问题在于时间。使用它的覆盖的CreatChildControls方法的自定义控件被添加到webpart本身的CreateChildControls中的页面控件中。直到webpart的OnPreRender方法触发后,才会在回发和非回发中调用自定义控件的CCC。

正如您在page life cycle中看到的,在Load和Render之间触发了回发事件,如果事件未添加到控件中,或者在Load结束之前未将控件添加到页面,事件不会发生。

因此,为了解决这个问题,我们需要以某种方式强制在Load结束之前调用自定义控件的CreateChildControls方法,就像在webpart的CCC期间一样。您无法手动调用该方法:该方法受到保护,无法从外部访问,因此我正在寻找正确的方法来执行此操作。

为了测试,我重命名了自定义控件的CCC,使其成为常规的公共方法,并从webpart的CCC调用该方法。现在我的事件正常发生。

如果这不适合您,请您发布您的代码以便我们找到错误吗?