2011-06-15 6 views
1

J'ajoute dynamiquement un gestionnaire d'événements sur un bouton de lien, d'abord lorsque la page est chargée o créer un bouton de lien avec la catégorie de produit. En cliquant sur la catégorie de produit, il déclenche un événement et transmet l'objet expéditeur IN du produit.Ajouter eventhandler dynamiquement

Voici mon problème: quand je readd le gestionnaire d'événements à la page charge, il est en donnant une erreur cannot cast sender object

Code:

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 

lorsque la la page est recharger en me donnant une erreur ou

Impossible de coulée objet de type 'ASP.products_aspx' de type 'System.Web.UI.WebControls.LinkButton' Dim getLinkDetail Comme LinkButton = CType (expéditeur, LinkButton)

+0

@Aristos: au moins 15 reps sont nécessaires pour upvote: http://meta.stackexchange.com/questions/41347/why-is-15-reputation-required-to-upvote Mais le PO devrait accepter des réponses et devrait faire plus d'effort en posant des questions lisibles. –

+0

@Tim merci pour la note. – Aristos

Répondre

2

dans la ligne GetProduct(Me, New EventArgs) vous passez une référence à la page (Me) en tant que paramètre de l'expéditeur. Dans la méthode GetProduct avec cette ligne Dim getLinkDetail As LinkButton = CType(sender, LinkButton) vous essayez de diffuser la page en tant que bouton de lien. Vous n'assignez pas du tout un gestionnaire d'événement dans la méthode de chargement de page, vous appelez simplement la méthode.