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

我正在将用户控件加载到Repeater的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。页面_load事件本身被称为。

我应该提到中继器是用户控件的一部分,该用户控件已加载在另一个用户控件内(这是一个大量使用用户控件的Dotnetnuke站点)。保存按钮链接看起来像这样:

javascript:__doPostBack('dnn$ctr498$AssignmentsList$rptAssignments$ctl04$ctl00$lbnUpdate','')
有帮助吗?

解决方案

这个问题体现了Webform如何超越自己的自身。

您必须通过重新结合或从ViewState重新组建中继器,以使子控制提高活动。您支付的价格是又一次访问数据源的旅行,也可能是所有存储在ViewState中客户端中的冗余数据。可耻!

其他提示

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

简而 他们不存在. 。因此,当ASP.NET WebForms寻找事件时,它找不到任何东西。

您的中继器什么时候获得数据宾夕法尼亚?尝试将按钮再次渲染到寄发后(即使作为测试)中的页面,以查看是否可以解决问题。

在每个后备上,USERCONTROL的ID是否相同?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top