Solved

Get data from control state on the INIT event

Posted on 2008-10-17
1
876 Views
Last Modified: 2013-11-07
What should we do to get the data in a control state of a page on the Init event after a postback is done?

You must keep in mind that the method(LoadControlState) that gets the data is automatically called when that method finishes and before the Load event starts similar to what happens with the viewstate and attributes.

Any ideas?

using System;

using System.Data;

using System.Configuration;

using System.Web;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Web.UI.HtmlControls;
 

public partial class _Default : System.Web.UI.Page

{

    string uniqueControlId = null;
 

    protected override void LoadControlState(object savedState)

    {

        if (savedState != null)

            uniqueControlId = (string)savedState;

    }
 

    protected override object SaveControlState()

    {

        return (object)uniqueControlId;

    }
 

    protected override void OnInit(EventArgs e)

    {

        try

        {

            Page.RegisterRequiresControlState(this);
 

            if (!IsPostBack)

            {

                uniqueControlId = Guid.NewGuid().ToString();

                Test test = new Test();

                test.value1 = "testData1";

                test.value2 = "testData2";

                Session["Data_" + uniqueControlId] = test;

            }

            else

            {

                //uniqueControlId is null, control state not loaded

                if (Session["Data_" + uniqueControlId] != null)

                    ((Test)Session["Data_" + uniqueControlId]).value1 += "Modified_INIT";

            }
 

            base.OnInit(e);

        }

        catch

        {

        }

    }
 
 
 

    protected void Page_Load(object sender, EventArgs e)

    {

        if (IsPostBack)

        {

            if (Session["Data_" + uniqueControlId] != null)

                ((Test)Session["Data_" + uniqueControlId]).value2 += "Modified_LOAD";

        }
 
 

        //uniqueControlId success loaded

        if (Session["Data_" + uniqueControlId] != null)

        {

            Response.Write("<br /> test.value1=" + ((Test)Session["Data_" + uniqueControlId]).value1);

            Response.Write("<br /> test.value2=" + ((Test)Session["Data_" + uniqueControlId]).value2);

        }

        else

        {

            Response.Write("<br />ERROR");

        }
 
 

    }
 

    protected override void OnUnload(EventArgs e)

    {

        SaveControlState();

        base.OnUnload(e);

    }
 

    protected void Button1_Click(object sender, EventArgs e)

    {
 

    }

}
 

public class Test

{

    public string value1;

    public string value2;

}

Open in new window

0
Comment
Question by:CMS-Team
1 Comment
 
LVL 3

Accepted Solution

by:
JunkMan earned 500 total points
ID: 22746205
It will not be possible to do without hacking around the framework's page cycle, and there might be implications with that.

For whatever reason you need to load your controls state on Init i would suggest you to change your logic.

If you explain me exactly why you need to do so, i'll be happy to guide you to another solution.
0

Featured Post

Maximize Your Threat Intelligence Reporting

Reporting is one of the most important and least talked about aspects of a world-class threat intelligence program. Here’s how to do it right.

Join & Write a Comment

Many of us here at EE write code. Many of us write exceptional code; just as many of us write exception-prone code. As we all should know, exceptions are a mechanism for handling errors which are typically out of our control. From database errors, t…
Introduction This article shows how to use the open source plupload control to upload multiple images. The images are resized on the client side before uploading and the upload is done in chunks. Background I had to provide a way for user…
Access reports are powerful and flexible. Learn how to create a query and then a grouped report using the wizard. Modify the report design after the wizard is done to make it look better. There will be another video to explain how to put the final p…
When you create an app prototype with Adobe XD, you can insert system screens -- sharing or Control Center, for example -- with just a few clicks. This video shows you how. You can take the full course on Experts Exchange at http://bit.ly/XDcourse.

757 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

21 Experts available now in Live!

Get 1:1 Help Now