在页面生命周期的PreInit事件中创建动态控件?

时间:2012-03-30 23:14:08

标签: asp.net

MSDN表示在页面生命周期的PreInit事件中创建动态控件。

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

为什么?

通过在PreInit事件中创建有什么好处?

我见过开发人员在Page_Load方法中创建动态控件的代码吗?

如果有什么不同?。

此致

3 个答案:

答案 0 :(得分:4)

如果您不需要担心在回发中保存控件“Page_Load,那么

ViewState可以正常工作,但如果您需要保留它,那么Load阶段不在您的位置应该添加这些控件。

在加载ViewState之前,动态控件必须存在于页面的控件层次结构中。加载视图状态 - 初始化之前只有一个阶段。这意味着,如果您希望动态控件保持视图状态,则必须将它们添加到页面的Init事件中的控件层次结构中。

http://aspnet.4guysfromrolla.com/demos/printPage.aspx?path=/articles/092904-1.aspx

但请注意,您无法访问ViewState事件中的Init,因为它尚未加载。因此,如果需要,您需要使用不同的持久性介质来跨回发(如Session)存储变量。

答案 1 :(得分:2)

对于原始海报,这个回复可能会迟到,但我认为这可能对其他人有所帮助。

如果您的应用程序/网站不使用母版页,最好在Page_PreInit事件中创建控件。但是如果您使用母版页并希望在运行时在内容页面上创建控件,则Page_Init是理想的事件。

您还可以在Page_Load上创建控件,但请记住,加载View State后会触发页面加载。

答案 2 :(得分:0)

添 谢谢回复。 我做了一个小实验,我在其中创建并在Page_Load方法中动态添加TextBox控件。

在页面上按钮的Postback单击事件中,我试图获取TextBox的Text属性的值。 当在Page_Load事件中动态添加控件而不是OnPreInt方法时,我能够在Button的click事件中获取值。 我认为即使在Page_Load方法中添加了控件,Text值也会保留在ViewState中。

遵循以下代码:

  <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;
    }
}

请让我知道这是正确的还是我做错了什么?

相关问题