【问题标题】:ASP.NET Button click not caught (button in user control which is dynamically loaded in Repeater)ASP.NET 按钮单击未捕获(用户控件中的按钮在中继器中动态加载)
【发布时间】:2011-02-28 00:49:36
【问题描述】:

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

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

Protected Sub rptAssignments_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.RepeaterItemEventArgs) Handles rptAssignments.ItemDataBound

    Dim CurrentAssignment As Assignment = DirectCast(e.Item.DataItem, Assignment)
    Dim ctl As UA = CType(LoadControl("~\Controls\UA.ascx"), UA)

    ctl.AssignmentID = CurrentAssignment.AssignmentID
    ctl.Assignment = CurrentAssignment.AssignmentName
    ctl.EnableViewState = True

    e.Item.Controls.Add(ctl)
End Sub

仅供参考,我需要在运行时加载控件,而不是在 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

问题是当点击保存按钮时,页面回发,但没有调用lbnUpdate_Click。然而,页面本身的 Page_Load 事件被调用。

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

javascript:__doPostBack('dnn$ctr498$AssignmentsList$rptAssignments$ctl04$ctl00$lbnUpdate','')

【问题讨论】:

    标签: asp.net user-controls repeater loadcontrol itemdatabound


    【解决方案1】:

    这个问题说明了网络表单如何超越自己。

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

    【讨论】:

    • 耶!我在 Page_Init 事件中反弹了转发器,现在按钮单击在动态加载的控件中触发。谢谢。
    【解决方案2】:

    我曾经遇到过类似的问题,可能是同一件事。

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

    您的中继器何时获得数据绑定?尝试在回发中再次将按钮呈现到页面(即使作为测试),看看是否可以解决问题。

    【讨论】:

      【解决方案3】:

      每次回发时 UserControl 的 ID 是否相同?

      【讨论】:

      • 是的。我认为下面的 2 个答案虽然突出了这个问题。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-25
      相关资源
      最近更新 更多