【问题标题】:Add eventhandler dynamically动态添加事件处理程序
【发布时间】:2011-06-15 11:40:04
【问题描述】:

我在链接按钮上动态添加一个事件处理程序,首先在页面加载时创建一个带有产品类别的链接按钮。单击产品类别时,它会触发一个事件并传递产品 ID IN 发件人对象。

这是我的问题:当我在页面加载时读取事件处理程序时,它给出了错误cannot cast sender object

代码:

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 As LinkBut​​ton = CType(sender, LinkBut​​ton)

【问题讨论】:

标签: asp.net vb.net


【解决方案1】:

GetProduct(Me, New EventArgs) 行中,您正在传递对页面(我)的引用作为发送者参数。在GetProduct 这一行Dim getLinkDetail As LinkButton = CType(sender, LinkButton) 的方法中,您试图将页面转换为链接按钮。您根本没有在页面加载方法中分配事件处理程序,您只是在调用该方法。

【讨论】:

    猜你喜欢
    • 2010-12-04
    • 2014-07-06
    • 2020-03-06
    • 2016-06-06
    • 1970-01-01
    • 2011-04-25
    • 1970-01-01
    • 2017-03-15
    • 1970-01-01
    相关资源
    最近更新 更多