Page_Load()
{
   TextBox box;
   if(!isPostBack)
{
   box = new TextBox();
   box.ID = "MyBox";
   this.Controls.Add(box );
}
}我在按钮的点击事件中用语句
(this.FindControl("MyBox") as TextBox).Text = "lisa";根本就找不到该控件!后来我用
Page_Load()
{
   TextBox box;
   box = new TextBox();
   box.ID = "MyBox";
   this.Controls.Add(box );
}生成可以找到控件,但是我的控件经过初始化以后,数据消失了,只是回到了以前的初始状态,就是说没有(this.FindControl("MyBox") as TextBox).Text = "lisa";这个值赋也没有用!我想是否我对PostBack理解不深! PostBack以后,是否所有的控件都经过一次重新构建? 但是,其他的服务器控件还保留了Text的值呢?各位高人能否指点一二!!!!!!!!!!!!

解决方案 »

  1.   

    呵呵,第一次请求页面的时候,会执行isPostBack里面的内容..此时不是回发,当你点击该页上的服务器控件而刷新页面的时候,是属于回发数据,但服务器会重先创建该页面,其他控件,但不会执行isPostBack里面的内容了,所以你的控件自然就不见了
      

  2.   

    你的代码有问题那么些更本添加不上TextBox控件,例子:
    private void Page_Load(object sender, System.EventArgs e)
    {
    TextBox box;
    box = new TextBox();
    box.ID = "MyBox";
    Page.Controls[1].Controls.Add(box);
    this.FindControl("box");
    }private void Button1_Click(object sender, System.EventArgs e)
    {
    if((this.FindControl("MyBox") as TextBox).Text == "lisa")
    {
    Response.Write("yes");
    }
    else
    {
    Response.Write("no");
    }
    }PostBack就是指当前的页面有没有提交,如果提交过了this.IsPostBack得到的值就会是false,例如:
    private void Page_Load(object sender, System.EventArgs e)
    {
      if(!this.IsPostBack)
      {
    TextBox box;
    box = new TextBox();
    box.ID = "MyBox";
    Page.Controls[1].Controls.Add(box);
    this.FindControl("box");
      }
    }
    这个时候if里面的语句就只会执行一次,你说的数据消失了不知道是怎么回事
      

  3.   

    if(!this.IsPostBack)
    是在你第一次加载的时候执行,你生成以后,Button1_Click,第一个加载的是Page_Load,那么就不会执行 if(!this.IsPostBack)中的内容了,就会丢失这些动态生成的控件,你不要加 if(!this.IsPostBack)
    就可以了
      

  4.   

    楼上正解,另外,注意k控件的viewstate设为true;
      

  5.   

    动态加载控件的代码不要放在 if(!this.IsPostBack)里执行