1

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 Answers 2

1

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.

Sign up to request clarification or add additional context in comments.

Comments

0

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.

1 Comment

If you think about what it would mean to serialize the event handler, which is you'd basically be serializing a pointer to a function, it becomes clear it would probably not be a very beneficial feature, IMO.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.