从自定义对象向用户控件添加事件处理程序

时间:2009-07-25 17:29:19

标签: c# asp.net user-controls

我创建了一个用户控件,其中包含一个LinkBut​​tons表(以及其他信息)。我在另一个自定义对象中创建表行,并在这些表行的某些单元格中返回带有链接按钮的TableRowCollection。

在用户控件的代码中,我为这些LinkBut​​tons的按钮单击创建了一个事件处理程序。我将用户控件传递给方法调用以创建表行(使用“this”),然后尝试将事件处理程序添加到LinkBut​​ton的“Click”。由于某种原因,事件处理程序不会触发由此按钮引起的回发。关于我可以采取哪些措施来解决这个问题?

以下是我创建按钮并添加事件处理程序的代码:

LinkButton button = new LinkButton();
button.Text = movie.Title;
button.Click += new EventHandler(control.Link_Click);
button.CommandArgument = result.LocalID.ToString();
cell1.Controls.Add(button);

其中“control”是作为参数传入的用户控件,“Link_Click”是事件处理程序。

提前致谢!

1 个答案:

答案 0 :(得分:1)

首先,如果事件处理程序已经在用户控件中,则不需要将对它的引用传递给它自己的方法。您只需访问事件处理程序中的任何属性或方法即可。

事件依赖于控件ID连接到正确的控件。如果您不是每次在回发时都以完全相同的方式创建链接按钮,并确保它们具有与之前相同的ID,那么您的事件处理程序将不会触发,因为ASP.Net管道将无法启动找到它认为是控制树中正确的按钮。

此外,如果您在每次回发时将用户控件重新绑定到其数据源,这可能会导致某些控件的事件丢失,原因与上面详述的相同。

检查以确保每次都正确地重新创建控件,并且每次都不会重新绑定用户控件。