2011-03-22 183 views
0

我已经创建了一个自定义的Web控件。在CreateChildControls方法我控制动态创建一个表添加行到它包含一个ImageButton,我想附加一个事件到这个ImageButton,但事件永远不会触发?CreateChildControls方法ChildControls不会触发事件

我试过Init方法也不起作用。代码如下CreateChildControls

  1. 我创建一个面板。
  2. 第i创建具有数据的表格和的ImageButton它
  3. 我此表添加到所创建的面板
  4. 我本小组添加到该方法Controls.Add被。

我也观察到,如果我直接向Controls.Add()方法添加一个控件并附加一个事件,它可以正常工作。

含义, 1.创建一个按钮附加一个事件处理 2.添加对Controls.Add被()方法

做上述正常工作。只有孩子控制事件不会被解雇,有什么我失踪?

在此先感谢

回答

0

我想我有同样的问题,因为你,但我敢靠近的解决方案,我只是不知道这是否是最好的解决办法。

对我来说问题是时机。带有被覆盖的CreatChildControls方法的自定义控件被添加到webpart自身的CreateChildControls中的页面控件中。直到Web部件的OnPreRender方法触发后,自定义控件的CCC才会被调用,无论是在回发中还是在非回发中。

正如您在page life cycle中看到的那样,在Load和Render之间会触发回发事件,并且如果未将事件添加到控件,或者在加载结束之前未将控件添加到页面,则事件会执行不开火。

因此,要解决这个问题,我们需要以某种方式强制自定义控件的CreateChildControls方法来加载结束之前被调用,如web部件的CCC中。你不能手动调用该方法:该方法是受保护的,不能从外部访问,所以我正在寻找正确的方法来做到这一点。

为了测试我改名为自定义控件的CCC,使之成为定期公开法,并呼吁从WebPart的CCC该方法。现在我的活动正常开火。

如果这不适合你,你能不能请发表您的代码,以便我们可以发现故障?

+3

调用'Control.EnsureChildControls()'运行'CreateChildControls'。 – 2011-03-28 09:22:08

+0

Control.EnsureChildControls(http://msdn.microsoft.com/en-us/library/system.web.ui.control.ensurechildcontrols.aspx)是受保护的方法,而不是公共的,就像的CreateChildControls,因此不能称为从对象本身的上下文之外。 – Wuolennaj 2011-03-28 11:51:01

+0

哦,他说'CreateChildControls方法'我以为他在继承另一个控件的方法中使用该方法,我看他的意思是事件。事情是'CreateChildControls'不保证在任何特定的时间甚至根本不会触发,它不是添加控件的正确位置(除非实际从控制代码本身构建自定义控件)。在“Page_Load”中添加它们有什么问题? – 2011-03-28 12:01:10