将控件移动到主页面中断事件绑定?

时间:2010-01-19 16:10:56

标签: webforms buttonclick

假设您的Web表单中有一个Button,OnClick绑定到代码隐藏事件。

然后将该按钮添加到母版页中,方法是将其添加到母版页中控件的Controls集合中。 这是在运行时,在Page_Load事件中完成的。

现在绑定的OnClick事件在哪里?仍然是Web表单的代码隐藏,还是在主页的代码隐藏中查找?

我做到了这一点,现在我的按钮没有做任何事情。它会回发页面,但实际上并没有在代码隐藏中运行绑定事件。

我在两种情况下检查了按钮的HTML。唯一改变的是ID和名称,以反映命名容器的变化:

在Web表单中(“MainContent”是ContentPlaceholder):

<input type="submit" id="ctl00_MainContent_DeleteButton" value="Yes, Delete" name="ctl00$MainContent$DeleteButton"/>    

在母版页中:

<input type="submit" id="ctl00_DeleteButton" value="Yes, Delete" name="ctl00$DeleteButton"/>

我已经运行了调试器并且可以确认它不再触及绑定事件。

是将ID绑定到事件的ID还是名称?如果是这样,我将它移入母版页是否会打破这种约束?

3 个答案:

答案 0 :(得分:0)

将控件绑定到代码隐藏事件的是属性(例如:<asp:Button ... OnClick="btnSubmit_click"&gt;),上面的示例中似乎缺少此属性。

双击母版页上的按钮,它应该连接事件。如果你认真对待事件处理,你会发现很多有趣的东西:)

答案 1 :(得分:0)

如果控件位于母版页中,引擎将在母版页后面的代码中查找事件处理程序。事件处理程序需要

一个。在与其定义相同的范围内声明,或

湾以编程方式分配。

答案 2 :(得分:0)

由于移动,您的控制执行生命周期可能会断开连接。

你说你在Page_Load期间移动控件,这在处理回发数据之后发生,但在回发更改通知和处理程序被触发之前发生。

Control Execution Lifecycle Reference

同样this表示UniqueID在回发处理中很重要,但我不确定事件。