jigsmshah
jigsmshah

Reputation: 165

Create Dynamic Controls in PreInit Event of Page Life Cycle?

MSDN says that create Dynamic Controls in PreInit Event of Page Life Cycle.

http://msdn.microsoft.com/en-us/library/ms178472.aspx

Why?

What advantage is derived by creating in PreInit Event?.

I have seen code where developers are creating dynamic controls in the Page_Load Method?

If there any difference?.

Regards

Upvotes: 4

Views: 11289

Answers (3)

Tim Schmelter
Tim Schmelter

Reputation: 460048

Page_Load works fine if you don't need to worry about saving the controls' ViewState across postbacks, but if you need to persist it, the Load stage is not where you should add these controls.

Dynamic controls must exist within the page's control hierarchy before the ViewState is loaded. There's only one stage before Load View State - Initialization. That means, if you want your dynamic controls to persist view state you must add them to the control hierarchy in the page's Init event.

https://web.archive.org/web/20210302172017/https://aspnet.4guysfromrolla.com/demos/printPage.aspx?path=/articles/092904-1.aspx

But mind that you cannot access the ViewState in Init event because it's yet not loaded. So you need to use a different persistence medium to store variables across postbacks(like Session) if required.

Upvotes: 4

Tsega
Tsega

Reputation: 21

This reply might be late for the original poster but I thought it might help some other people.

If your application/ website doesn't use master page, it's best to create controls at Page_PreInit event. But if you use master page and want to create controls on content pages at run time Page_Init is the ideal event.

You can also create controls on Page_Load but bear in mind page load is fired after View State is loaded.

Upvotes: 2

jigsmshah
jigsmshah

Reputation: 165

Tim, Thanks for the reply. I did a small experiment in which I am creating and adding a TextBox control dynamically in Page_Load method.

In the Postback click event of Button on the page,I am trying to get the value of the TextBox's Text Property. I am able to get the value in the click event of the Button when the control is dynamically added in the Page_Load event and not the OnPreInt method. I think that the Text value is retained in the ViewState even though the control is been added in Page_Load method.

following the code:

  <div>
         <p>
           <asp:Label ID="lbl" runat="server" />
        </p>
        <p>
          <asp:PlaceHolder ID="plcHolder" runat="server"></asp:PlaceHolder>
        </p>
        <p>
          <asp:Button ID="btn" runat="server" Text="Click" OnClick="btn_Click" />
        </p>
    </div>


private void _createTextBox()
{
    TextBox textBox = new TextBox();
    textBox.ID = "txtBox";
    textBox.Width = 250;
    textBox.ReadOnly = false;
    plcHolder.Controls.Add(textBox);
}

protected void Page_Load(object sender, EventArgs e)
{
    _createTextBox();
    if (!this.IsPostBack)
    {
        Control ctrl = plcHolder.FindControl("txtBox");
        if (ctrl != null)
        {
            TextBox txtBox = ctrl as TextBox;
            txtBox.Text = DateTime.Now.ToString();
        }
    }
}
protected void btn_Click(object sender, EventArgs e)
{
    Control ctrl = plcHolder.FindControl("txtBox");
    if (ctrl != null)
    {
        TextBox txtBox = ctrl as TextBox;
        lbl.Text = txtBox.Text;
    }
}

Kindly let me know is this correct or what am i doing wrong?

Upvotes: 0

Related Questions