2009-05-11 15 views
1

J'ai défini la propriété enableviewstate de linkbutton et label sur true.enregistre également les mêmes boutons à la publication dans le gestionnaire d'événements pageload.mais je ne peux pas appeler le gestionnaire d'événements onclick de linkbutton.can u dites-moi quel est le problème avec le code?Asp.net: pour appeler le gestionnaire d'événements des boutons générés dynamiquement?

public partial class _Default: System.Web.UI.Page { protected void Page_Load (expéditeur d'objet, EventArgs e) {

 List<LinkButton> listOfLinkButton = Session["ListOfLinkButton"] as List<LinkButton>; 
     List<Label> listOfLabel = Session["ListOfLabel"] as List<Label>; 
     if(listOfLabel!=null && listOfLinkButton!=null) 
     { 
      for (int i = 0; i < listOfLinkButton.Count; i++) 
      { 
       PlaceHolder1.Controls.Add(listOfLinkButton[i]); 
       PlaceHolder1.Controls.Add(new LiteralControl("<br />")); 
       PlaceHolder1.Controls.Add(listOfLabel[i]); 
       PlaceHolder1.Controls.Add(new LiteralControl("<br />")); 
      } 
     } 



} 



protected void LinkButton_Click(object sender, EventArgs e) 
{ 
    LinkButton linkButton = sender as LinkButton; 

    Response.Redirect(linkButton.Attributes["LinkUrl"]);   
} 
protected void Button1_Click1(object sender, EventArgs e) 
{ 

    List<LinkButton> listOfLinkButton = new List<LinkButton>(); 
    List<Label> listOfLabel = new List<Label>(); 
    Rss rssDocumentObj = RssFileReader.GetRssDocumentData(TextBox1.Text); 
    for (int j = 0; j < rssDocumentObj.ListOfChannel.Count; j++) 
    { 
     LinkButton linkButton = new LinkButton(); 
     linkButton.ID = "LinkButtonForChannelDynamicInPlaceHolder1Id" + j; 
     linkButton.EnableViewState = true; 
     linkButton.ForeColor = Color.Blue; 
     linkButton.Font.Bold = true; 
     linkButton.Font.Size = 18; 
     linkButton.Font.Underline = true; 
     linkButton.Text = rssDocumentObj.ListOfChannel[j].ChannelTitle.InnerText; 
     linkButton.Click += new EventHandler(LinkButton_Click); 
     linkButton.Attributes.Add("LinkUrl", rssDocumentObj.ListOfChannel[j].ChannelLink.InnerText); 
     linkButton.Attributes.Add("onmouseover", "this.style.color = '#006699'"); 
     linkButton.Attributes.Add("onmouseout", "this.style.color = '#0000ff'"); 
     PlaceHolder1.Controls.Add(linkButton); 
     listOfLinkButton.Add(linkButton); 
     PlaceHolder1.Controls.Add(new LiteralControl("<br />")); 
     Label label = new Label(); 
     label.ID = "LabelForChannelDynamicInPlaceHolder1Id" + j; 
     label.EnableViewState = true; 
     label.ForeColor = Color.DarkSlateGray; 
     label.Text = rssDocumentObj.ListOfChannel[j].ChannelDescription.InnerText; 
     PlaceHolder1.Controls.Add(label); 
     listOfLabel.Add(label); 
     PlaceHolder1.Controls.Add(new LiteralControl("<br />")); 

     for (int i = 0; i < rssDocumentObj.ListOfChannel[j].ListOfItem.Count; i++) 
     { 
      LinkButton linkButtonForItem = new LinkButton(); 
      linkButtonForItem.ID = "LinkButtonDynamicInPlaceHolder1Id" + j + " " + i; 
      linkButtonForItem.EnableViewState = true; 
      linkButtonForItem.ForeColor = Color.Blue; 
      linkButtonForItem.Font.Bold = true; 
      linkButtonForItem.Font.Size = 14; 
      linkButtonForItem.Font.Underline = false; 
      linkButtonForItem.Text = rssDocumentObj.ListOfChannel[j].ListOfItem[i].ItemTitle.InnerText; 
      linkButtonForItem.Click += new EventHandler(LinkButton_Click); 
      linkButtonForItem.Attributes.Add("LinkUrl", rssDocumentObj.ListOfChannel[j].ListOfItem[i].ItemLink.InnerText); 
      linkButtonForItem.Attributes.Add("onmouseover", "this.style.color = '#006699'"); 
      linkButtonForItem.Attributes.Add("onmouseout", "this.style.color = '#0000ff'"); 
      PlaceHolder1.Controls.Add(linkButtonForItem); 
      listOfLinkButton.Add(linkButtonForItem); 
      PlaceHolder1.Controls.Add(new LiteralControl("<br />")); 
      Label labelForItem = new Label(); 
      labelForItem.ID = "LabelDynamicInPlaceHolder1Id" + i; 
      labelForItem.EnableViewState = true; 
      labelForItem.ForeColor = Color.DarkGray; 
      labelForItem.Text = rssDocumentObj.ListOfChannel[j].ListOfItem[i].ItemDescription.InnerText; 
      PlaceHolder1.Controls.Add(labelForItem); 
      listOfLabel.Add(labelForItem); 
      PlaceHolder1.Controls.Add(new LiteralControl("<br />")); 
      Session["ListOfLinkButton"] = listOfLinkButton; 
      Session["ListOfLabel"] = listOfLabel; 
     } 
    } 
} 

}

Répondre

1

Vous faites des hypothèses sur les aspects de ce bouton est enregistré en session. Essayez à nouveau d'ajouter l'événement au bouton lorsque vous restaurez à partir de l'état de la session pendant le chargement de la page.

0

J'ai obtenu ma solution en assignant de nouveau le gestionnaire d'événements au bouton après l'avoir récupéré de la session, mais je ne comprenais pas pourquoi je dois l'assigner à nouveau, quand il est déjà assigné dans une variable de session stockée.

+1

Si vous pensez à ce que cela signifierait pour sérialiser le gestionnaire d'événements, ce qui signifie que vous seriez en train de sérialiser un pointeur vers une fonction, il devient clair que ce ne serait probablement pas une fonctionnalité très utile, IMO. –