先帖出页面代码吧
首先在页面中拖一个按钮进来  下面复制代码到自己的cs文件中
public partial class _Default : System.Web.UI.Page 
{
    private static int i = 0;
    MyTextBox t1 = new MyTextBox();
    MyTextBox t2 = new MyTextBox();
    MyTextBox t3 = new MyTextBox();
    class MyTextBox : TextBox
    {
        protected override bool LoadPostData(string postDataKey, NameValueCollection postCollection)
        {
            this.Page.Response.Write(this.Text);
            return base.LoadPostData(postDataKey, postCollection);
        }
    }
    protected void Page_Load(object sender, EventArgs e)
    {
        form1.Controls.Add(t1);
        form1.Controls.Add(t2);
        
        if (!IsPostBack)
        {
            t1.Text = "zhh1";
            t2.Text = "zhh2";
            t3.Text = "zhh3";
        }  
        form1.Controls.Add(t3);
    }
}
问题主要是t3,你可以尝试去运行,当你点页面的一个按钮进行回发数据的时候,t3的ViewState没有加载,只执行了Ipostbackdatahander里的LoadPostData()方法,那么再比较t1的输出可以看出它既加载了VIEWstate,又执行了loadpostdata(),但是更大的问题出来了,因为当你第二次点击按钮回发的时候,t3神奇般的可以加载viewstate了 

解决方案 »

  1.   

    怎么不把form1.Controls.Add(t3);放在form1.Controls.Add(t2);后面
      

  2.   

    设置ID属性
    form1.Controls.Add(t1);
    form1.Controls.Add(t2);
    form1.Controls.Add(t3);
     if (!IsPostBack)
       {
           t1.Text = "zhh1";
           t2.Text = "zhh2";
           t3.Text = "zhh3";
    }  
    ViewState["CreateControl"] = true;判断控件是否添加
          
      

  3.   

    form1.Controls.Add(t1); 
    form1.Controls.Add(t2); 
    form1.Controls.Add(t3); 
    if (!IsPostBack) 
      { 
          t1.Text = "zhh1"; 
          t2.Text = "zhh2"; 
          t3.Text = "zhh3"; 

    form1.Controls.Add(t1); 
    form1.Controls.Add(t2); 
    form1.Controls.Add(t3);
    自己调试了下,放前后,第一次得到的结果是不同的,自己不懂,感觉和LoadPostData有关,具体的不懂,关注中