把执行事件的代码放在OnInit()中
OnInit()中才会保持状态

解决方案 »

  1.   

    没有问题的。放在 Page_Load中。
    using System;
    using System.Collections;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Web;
    using System.Web.SessionState;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.HtmlControls;namespace t1
    {
    /// <summary>
    /// Summary description for WebForm2.
    /// </summary>
    public class WebForm2 : System.Web.UI.Page
    {
    protected System.Web.UI.WebControls.Label Label1;
    protected System.Web.UI.WebControls.Table Table1;

    private void Page_Load(object sender, System.EventArgs e)
    {
    // Put user code to initialize the page here
    Button Btn1=new Button();
    Btn1.Click += new System.EventHandler(this.EventTest);
    Btn1.Text="Click me";
    Table1.Rows[0].Cells[0].Controls.Add(Btn1);
    } private void EventTest(object sender, System.EventArgs e)
    {
    Label1.Text = "Button 1 clicked";
    } #region Web Form Designer generated code
    override protected void OnInit(EventArgs e)
    {
    //
    // CODEGEN: This call is required by the ASP.NET Web Form Designer.
    //
    InitializeComponent();
    base.OnInit(e);
    }

    /// <summary>
    /// Required method for Designer support - do not modify
    /// the contents of this method with the code editor.
    /// </summary>
    private void InitializeComponent()
    {    
    this.Load += new System.EventHandler(this.Page_Load); }
    #endregion
    }
    }
      

  2.   

    或者,在你的Page_Load事件中,把上述new的代码、events处理的代码,都放进去。否则,每个页面刷新的时候,你的东东就没有了!
      

  3.   

    没错,控件状态有viewstate自动维护,你不用担心数据会丢失。
    你只要考虑postback以后控件会不会丢失
    所以应该把动态控件放入page_load或 oninit中。