大家好我刚开始在asp.net编程我很难动态添加事件处理程序。这是加载aspx页面的场景,链接按钮是用事件处理程序添加的
页面加载链接按钮和带有链接按钮的事件处理程序
Dim products As New LinkButton
products.Text =“产品”
testPanel.Controls.Add(产品)
AddHandler products.Click,AddressOf getProducts
getProducts函数将在数据库中循环获取所有产品
Dim testDb As New Product
Dim arr As ArrayList = testDb.DbLoop()
Dim ObjList As ProductBo
Dim ID As Integer
Dim link As LinkButton
For Each ObjtList In arr
ID= ObjtList.C_Id
link = New LinkButton
testPanel.Controls.Add(New LiteralControl("<br />"))
link.ID = ID
link.Text = ObjList.Name
link.CommandArgument = CustInt
Me.testPanel.Controls.Add(link)
AddHandler link.Click, AddressOf getProductsDetails
Next ObjList
这是循环后我的问题它将在数据库中显示产品列表,我想要做的是当我点击一个产品时添加每个产品名称的链接它应该调用另一个事件处理程序我尝试这个但是它不工作。
AddHandler link.Click,AddressOf getProductsDetails
谢谢
答案 0 :(得分:3)
不要忘记你必须re-create all dynamic controls on postback
你的Page
只是一个记住的类,并且每个请求都会实例化一次,如果它没有重新创建这些控件以及回发请求上的关联处理程序,那么你就不会发生任何事情。
您需要在Page_Load
之前重新创建这些控件,您可以在Page_Init
中执行此操作或覆盖CreateChildControls
方法。
答案 1 :(得分:2)
它无法正常工作的原因是你正在进行回发。您必须在每次回发时重新添加处理程序。我会在_Init事件页面上这样做。
答案 2 :(得分:1)
交换以下一行:
Me.testPanel.Controls.Add(link)
AddHandler link.Click, AddressOf getProductsDetails
他们应该是:
AddHandler link.Click, AddressOf getProductsDetails
Me.testPanel.Controls.Add(link)
答案 3 :(得分:0)
试试这个:
Protected Sub page_init(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Init 'addhadler must in here!
somecode...
End Sub
答案 4 :(得分:0)
Protected Sub page_init(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Init
addButton()'必须加在此处,否则动态注册的事件无法初始化
End Sub
Public sub addButton(ByVal nvrid As Integer) As Object
'.....
AddHandler btn.Command, AddressOf testCmd
End sub
Private Sub testCmd(source As Object, e As CommandEventArgs)
Debug.Print(e.ToString)
End Sub