ASP.NET按钮单击未被捕获(在Repeater中动态加载的用户控件中的按钮)

ASP.NET按钮单击未被捕获(在Repeater中动态加载的用户控件中的按钮),asp.net,user-controls,repeater,loadcontrol,itemdatabound,Asp.net,User Controls,Repeater,Loadcontrol,Itemdatabound,我编写了一个用户控件,它捕获一些用户输入,并有一个保存按钮将其保存到数据库中。我使用一个转发器在页面上呈现许多这样的控件——想象一下,每个问题旁边都有一个保存按钮的多项选择题列表 我正在中继器的ItemDataBound事件中加载用户控件,如下所示(代码简化): 仅供参考,我需要在运行时加载控件,而不是在ItemTemplate中指定它,因为每行可以使用不同的控件 在用户控件中,有如下链接按钮: <asp:LinkButton ID="lbnUpdate" runat="server" T

我编写了一个用户控件,它捕获一些用户输入,并有一个保存按钮将其保存到数据库中。我使用一个转发器在页面上呈现许多这样的控件——想象一下,每个问题旁边都有一个保存按钮的多项选择题列表

我正在中继器的ItemDataBound事件中加载用户控件,如下所示(代码简化):

仅供参考,我需要在运行时加载控件,而不是在ItemTemplate中指定它,因为每行可以使用不同的控件

在用户控件中,有如下链接按钮:

<asp:LinkButton ID="lbnUpdate" runat="server" Text="Update" OnClick="lbnUpdate_Click" />
Protected Sub lbnUpdate_Click(ByVal sender As Object, ByVal e As EventArgs) Handles lbnUpdate.Click
   ' my code to update the DB
End Sub
javascript:__doPostBack('dnn$ctr498$AssignmentsList$rptAssignments$ctl04$ctl00$lbnUpdate','')
问题是,当单击Save按钮时,页面会发回,但不会调用lbnUpdate_Click。然而,调用页面本身的页面加载事件

我应该提到,中继器是用户控件的一部分,用户控件加载在另一个用户控件中(这是一个大量使用用户控件的DotNetNuke站点)。“保存”按钮链接如下所示:

<asp:LinkButton ID="lbnUpdate" runat="server" Text="Update" OnClick="lbnUpdate_Click" />
Protected Sub lbnUpdate_Click(ByVal sender As Object, ByVal e As EventArgs) Handles lbnUpdate.Click
   ' my code to update the DB
End Sub
javascript:__doPostBack('dnn$ctr498$AssignmentsList$rptAssignments$ctl04$ctl00$lbnUpdate','')

我曾经有过类似的问题,那可能是同一件事

简而言之,由于您是动态创建按钮的,因此回发后按钮不存在。因此,当ASP.NET Webforms查找事件时,它找不到任何内容


您的中继器何时进行数据绑定?尝试在回发中再次将按钮呈现到页面上(甚至作为测试),以查看这是否起作用。

我曾经遇到过类似的问题,可能是同样的问题

简而言之,由于您是动态创建按钮的,因此回发后按钮不存在。因此,当ASP.NET Webforms查找事件时,它找不到任何内容


您的中继器何时进行数据绑定?尝试在回发中再次将按钮呈现到页面上(甚至作为测试),看看这是否奏效。

这个问题说明了webforms是如何超越自身的


您必须通过重新绑定或从viewstate重新配置中继器,以使子控件引发事件。您付出的代价要么是再次访问数据源,要么是在viewstate中存储在客户机上的所有冗余数据。可耻

这个问题说明了webforms是如何超越自己的


您必须通过重新绑定或从viewstate重新配置中继器,以使子控件引发事件。您付出的代价要么是再次访问数据源,要么是在viewstate中存储在客户机上的所有冗余数据。可耻

每次回发时UserControl的ID都相同吗?

每次回发时UserControl的ID都相同吗?

是的。我认为下面的两个答案突出了这个问题,是的。我认为下面的两个答案突出了这个问题。耶!我在Page_Init事件中恢复中继器,现在在动态加载的控件中触发按钮单击。谢谢,耶!我在Page_Init事件中恢复中继器,现在在动态加载的控件中触发按钮单击。谢谢