动态添加事件处理程序

问题描述

| 我正在动态地在链接按钮上添加一个事件处理程序,首先是在页面加载时o用产品类别创建一个链接按钮。单击产品类别后,它将触发一个事件并传递product-id IN发送者对象。 这是我的问题:读取页面加载事件处理程序时,出现错误“ 0” 码:
sub page int

Me.Page.EnableViewState = True

end sub
page load

 Catdisplay()

  If ViewState(\"GetProductClicked\") = True Then

GetProduct(Me,New EventArgs)

    End If
Function Catdisplay() As Boolean
        Dim arr As New ArrayList
        Dim objTesting As New Bo_Dall_Layer.BoCategory
        arr = objTesting.GetAllCategory()

        Dim objExtra As Bo_Dall_Layer.BoCategory
        Dim Cat_hyperLink As LinkButton

        For Each objExtra In arr

            Cat_hyperLink = New LinkButton
            Cat_hyperLink.Text = objExtra.CategoryName
            Cat_hyperLink.CommandArgument = objExtra.CategoryId

            AddHandler Cat_hyperLink.Click,AddressOf GetProduct

            CatPanel.Controls.Add(New LiteralControl(\"<br />\"))
            CatPanel.Controls.Add(Cat_hyperLink)
        Next



        ViewState.Item(\"CategoryLoaded\") = False.ToString

    End Function


    Private Sub GetProduct(ByVal sender As Object,ByVal e As EventArgs)

        Dim arrCollectList As New ArrayList
        Dim getLinkDetail As LinkButton = CType(sender,LinkButton)
        Dim getCatID As String = getLinkDetail.CommandArgument
        Dim SendCatID As Integer
        SendCatID = CInt(getCatID)
        Dim objGetProduct As New Bo_Dall_Layer.BoProduct
        arrCollectList = objGetProduct.getSelectProduct(SendCatID)
        Dim objTemCollectPrd As Bo_Dall_Layer.BoProduct

        Dim lblPrdName As Label
        Dim lblPrdDes As Label
        Dim lblPrdPrice As Label
        Dim addCart As LinkButton


        For Each objTemCollectPrd In arrCollectList

            lblPrdName = New Label
            lblPrdDes = New Label
            lblPrdPrice = New Label
            addCart = New LinkButton

            getCatID = objTemCollectPrd.ProductId

            PrdName.Controls.Add(New LiteralControl(\"<br />\"))
            lblPrdName.Text = objTemCollectPrd.ProductName
            PrdName.Controls.Add(New LiteralControl(\"<br />\"))

            PrdDesc.Controls.Add(New LiteralControl(\"<br />\"))
            lblPrdDes.Text = objTemCollectPrd.ProductDescription
            PrdDesc.Controls.Add(New LiteralControl(\"<br />\"))
            lblPrdPrice.Text = objTemCollectPrd.ProductPrice

            PrdPrice.Controls.Add(New LiteralControl(\"<br />\"))
            lblPrdPrice.Text = objTemCollectPrd.ProductPrice
            PrdPrice.Controls.Add(New LiteralControl(\"<br />\"))

            PrdCart.Controls.Add(New LiteralControl(\"<br />\"))
            addCart.Text = \"Add to Cart\"
            addCart.CommandArgument = objTemCollectPrd.ProductId
            PrdCart.Controls.Add(New LiteralControl(\"<br />\"))


            PrdName.Controls.Add(lblPrdName)
            PrdDesc.Controls.Add(lblPrdDes)
            PrdPrice.Controls.Add(lblPrdPrice)
            PrdCart.Controls.Add(addCart)
        Next

        ViewState.Item(\"GetProductClicked\") = True


    End Sub
页面重新加载时给我一个错误 无法将类型为'ASP.products_aspx \'的对象转换为类型为\'System.Web.UI.WebControls.LinkBut​​ton \' Dim getLinkDetail为LinkBut​​ton = CType(发送方,LinkBut​​ton)     

解决方法

        在第4行中,您传递了对页面(Me)的引用作为发送者参数。在带有这行
Dim getLinkDetail As LinkButton = CType(sender,LinkButton)
GetProduct
方法中,您尝试将页面投射为链接按钮。您根本没有在页面加载方法中分配事件处理程序,只是在调用该方法。