【发布时间】: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