1
votes

i have set enableviewstate property of linkbutton and label to true.also regenrating same buttons on postback in pageload event handler.but m not able to call onclick event handler of linkbutton.can u please tell me what is problem with code?

public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, 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;
        }
    }  
}

}

2

2 Answers

1
votes

You are making assumptions about what aspects of that button is saved in session. Try adding the event to the button again when you restore from session state during your page load.

0
votes

I got my solution by assigning event-handler to button again after retrieving it from session, but I could not understand why I need to assign it again, when its already assigned in stored session variable.