【发布时间】:2012-02-03 15:06:25
【问题描述】:
我有一个 ASP.NET Web 表单,我通过用户控件在其上显示数据库项目列表,动态生成用户控件 - 工作正常。
另外,在页面上,我有一个 asp:dropdownlist,其中包含可以添加到此数据库列表中的项目。除了这个下拉菜单,我还有一个“添加”按钮。我的意图是用户选择项目,点击添加,然后表单上的用户控件列表将包含这个新项目。
我已经完成了所有这些工作。
我的问题是用户控件有一个“删除”按钮,它会从列表中删除选定的项目。这行得通,除非我添加一个新项目。因为我的“添加”按钮事件总是在 Page_Load 之后触发,所以即使我重新生成用户控件列表,内部用户控件点击事件也不会触发,因为控件不是作为 Page_Load 的一部分创建的。
我需要知道我做错了什么,或者这里的最佳做法,任何建议。我试图准确描述问题,但如果我没有成功,请告诉我,我可以添加更多细节。
简单的恢复:我需要知道如何通过页面按钮单击事件将动态创建的用户控件添加到页面,并且仍然让用户控件内部单击(等)事件触发。
感谢您的帮助。
编辑:根据这里先生们的反馈,并针对他们的建议进行了一些进一步的研究,我最终根据此页面上的内容实施了一个解决方案:
http://ryanfarley.com/blog/archive/2005/03/11/1886.aspx
这是一个显示我如何处理这个问题的 sn-p。这个 sn-p 驻留在我的 PreInit 事件处理程序中。不完全是文明时代的优雅武器,但有时你只需要使用爆能枪。
'Look to see if button for adding a new client number has been
'clicked. If so, call the sub to add the item NOW, so that it
'is able to have it's internal click events fire.
For Each control_string As String In Request.Form
Dim ctl As Control = Page.FindControl(control_string)
If (ctl IsNot Nothing) AndAlso (ctl.ID = "cmdAddClientNumber") Then
Me.AddClientNumberToList()
Exit For
End If
Next
【问题讨论】:
-
这没有多大意义...为什么您希望添加的控件在首次添加时“触发其内部点击事件”?这样的正常流程是: 第一步:用户点击“cmdAddClientNumber”;第 2 步:在 cmdAddClientNumber_Click 中,您 AddClientNumberToList;第三步:用户点击“ClientNumber”中的某个按钮;第 4 步:在 PreInit 中,调用 AddClientNumberToList;第 5 步:ASP.NET 负责调用“ClientNumber.SomeButton_Click”以响应用户操作。如果您需要更多细节 - 您将展示更多代码。
-
在所有应有的尊重下都非常有意义,并解决了我的问题。我通过按钮单击事件创建用户控件。该控件有自己的删除按钮,允许用户将其从列表中删除。如果一个项目被意外添加,用户需要能够单击该用户控件上的删除按钮来删除它。我的问题解决了。如果这还不够清楚,将我的所有代码转储到此页面将无济于事。非常感谢。
标签: asp.net user-controls event-handling