Property null after postback - Dynamically loaded control

[亡魂溺海] 提交于 2019-11-28 11:24:36
Johnny_D

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.

Imran Balouch

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

In Microsoft explanations about ASP.NET page life cycle, it is written that dynamically created controls must be created in PreInit.

It worked for me. Here is my main page :

protected global::System.Web.UI.HtmlControls.HtmlGenericControl FiltersZone;

(. . .)

 protected override void OnPreInit(EventArgs e)
    {
        base.OnPreInit(e);
        FiltersZone.Controls.Add(new PlanningFiltersSurgeonWeb());
    }

This dynamically created ".ascx" control contains an hidden field :

<input id="hidTxtPaint" type="hidden" name="hidTxtPaint" runat="server" />

I am now able to retrieve its value from within dynamically created ASCX control Page_Load event, after a "submit" or a "__dopostback('hidTxtPaint')" initiated from JavaScript.

On the other hand, the hidden field's value is always empty after a POST if its parent ".ascx" control is added in main page's Page_Load event.

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!