2011-06-15 138 views
1

我在链接按钮上动态添加事件处理程序,首先在页面加载时创建一个包含产品类别的链接按钮。在点击产品类别时,它会触发一个事件并传递产品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' 昏暗getLinkDetail作为的LinkBut​​ton = CTYPE(发件人,LinkBut​​ton的)

+0

@Aristos:至少需要15个代表upvote:http://meta.stackexchange.com/questions/41347/why-is-15-reputation-required-to-upvote但OP应该接受答案,应该多提出一些清晰的问题。 – 2011-06-15 11:48:43

+0

@Tim谢谢你的提示。 – Aristos 2011-06-15 17:43:15

回答

2
在线路

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

相关问题