Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Property null after postback - Dynamically loaded control

Tags:

asp.net

ascx

I'm aware this question has been asked many times before but I suspect I have a unique scenario.

I'm loading a Child Control (ASCX) and setting a Property on that Control. This works perfectly fine until postback where the property is null.

Herewith the First Class which loads the ChildControl :

protected override void CreateChildControls()
{
    MyUserControl control = (MyUserControl)Page.LoadControl(_ascxPath);
    control.MyProperty = base.MyProperty
    Controls.Add(control);
}

Then, on my Child Control I've got the following code:

public partial class MyUserControl : UserControl
{
    public MyType MyProperty { get; set; }
    protected void Page_Load(object sender, EventArgs e)
    {
        //Exception on next line because Property is null (only on postback)
        var somevalue = MyProperty.SubProperty;
like image 257
Fox Avatar asked Jun 07 '12 08:06

Fox


2 Answers

Ok. Let me try to explain it.
1. Once page is created, you get full page lifecycle
2. You click on some control to create user control, and you get it
3. Now you are entering value to this control, and getting postback
4. On server side postback is handled, but as you can see viewstate actions appear as soon as page is loaded.
One of main purposes of viewstate is handling control events, to see if they are changed, or save their states or something else.
5. If on the moment, when viewstate is loaded you control is still not constructed, then all it's events and values would be ignored.

Solution either make it static control and just hide it, either create it before viewstate actions started.

like image 59
Johnny_D Avatar answered Sep 24 '22 07:09

Johnny_D


You need to add the control and set properties in the Page_Init event, other wise you will lose the properties value.

like image 28
Imran Balouch Avatar answered Sep 21 '22 07:09

Imran Balouch