• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 896
  • Last Modified:

Get data from control state on the INIT event

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
CMS-Team
Asked:
CMS-Team
1 Solution
 
JunkManCommented:
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

Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Tackle projects and never again get stuck behind a technical roadblock.
Join Now