【问题标题】:Add Event Handler to User Control from custom object从自定义对象将事件处理程序添加到用户控件
【发布时间】:2009-07-26 01:41:24
【问题描述】:

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

在用户控件后面的代码中,我为这些链接按钮的按钮单击创建了一个事件处理程序。我将用户控件传递给方法调用以创建表行(使用“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”是事件处理程序。

提前致谢!

【问题讨论】:

    标签: c# asp.net user-controls


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 谢谢!这有帮助。我认为问题在于我创建了这些控件 OnPreRender(在事件处理程序触发后,因此当事件处理程序触发时 LinkBut​​tons 不存在)。我不能更快地创建按钮,因为我没有更快的数据。我想我可能不得不考虑如何做某种 javascript 解决方法。再次感谢!
    • 那肯定是问题:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-29
    • 2016-02-17
    • 2019-10-15
    相关资源
    最近更新 更多