2009-05-11 3 views
1

Я установил свойство enableviewstate linkbutton и label на true.also regenrating такие же кнопки на postback в pageload event handler.but m не удалось вызвать обработчик события onclick linkbutton.can u, пожалуйста, скажите мне, что является проблемой с кодом?Asp.net: вызов обработчика событий динамически сгенерированных кнопок?

общественного класса _Default парциальное: System.Web.UI.Page { защищен недействительным Page_Load (объект отправителя, EventArgs е) {

 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; 
     } 
    } 
} 

}

ответ

1

Вы делаете предположения о том, какие аспекты этой кнопки сохраняется в сеансе. Попробуйте добавить событие к кнопке снова, когда вы восстанавливаете состояние сеанса во время загрузки страницы.

0

Я получил свое решение, назначив событие-обработчик кнопке снова после извлечения из сеанса, но я не мог понять, зачем мне его снова назначать, когда он уже назначен в хранимой переменной сеанса.

+1

Если вы думаете о том, что означало бы сериализацию обработчика событий, то есть вы в основном сериализуете указатель на функцию, становится ясно, что это, вероятно, не очень полезная функция, ИМО. –

Смежные вопросы