2011-06-08 121 views
2

大家好我只是开始在asp.net编程我努力添加事件处理程序动态。下面是这种情况时,ASPX页面加载链接按钮是一个事件处理程序asp.net事件处理程序,当点击链接按钮动态

页面加载添加链接按钮和事件处理程序链接按钮


昏暗的产品作为新的LinkBut​​ton

添加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

谢谢

回答

1

立交下面一行:

Me.testPanel.Controls.Add(link) 
AddHandler link.Click, AddressOf getProductsDetails 

他们应该是:

AddHandler link.Click, AddressOf getProductsDetails 
Me.testPanel.Controls.Add(link) 
2

它不工作的原因你是否正在通过回传。每次回发都必须重新添加处理程序。我会在页面_Init事件中执行此操作。

+0

+1 @Robert Beaubien。我只是忽略了这一点。 – 2011-06-08 15:19:49

3

不要忘记你必须re-create all dynamic controls on postback

Page就是一个类记得,它是每个请求实例化一次,如果不重新创建这些控件以及上回发请求相关的处理程序,那么你不会得到任何事情发生..

你需要这些控件重现之前Page_Load,您可以在Page_Init做到这一点或重写CreateChildControls方法。

+0

也为你+1。 – 2011-06-08 15:20:17

0

试试这个:

Protected Sub page_init(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Init 'addhadler must in here! 
    somecode... 
End Sub 
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