动态单击链接按钮时的asp.net事件处理程序

时间:2011-06-08 15:01:21

标签: asp.net vb.net

大家好我刚开始在asp.net编程我很难动态添加事件处理程序。这是加载aspx页面的场景,链接按钮是用事件处理程序添加的

页面加载链接按钮和带有链接按钮的事件处理程序


Dim products As New 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

谢谢

5 个答案:

答案 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