我动态的生成了textbox,但无法取得此控件的值。代码如下:
protected void Page_Load(object sender, EventArgs e)

  if (!IsPostBack)

  ......
  for (int i = 0; i < 10; ++i)            //断点1
        {
                TextBox tx = new TextBox();
                 tx.ID = "txt_" + i.ToString();
                 tx.Text = i.ToString();
                PanelAuto.Controls.Add(tx);//PanelAuto为前台定义的一个Panel控件
        }
 }}
////////////////////////////////////////////////////////////////// protected void Button1_Click(object sender, EventArgs e)
    {
        { 
          TextBox test =(TextBox)this.PanelAuto.FindControl("txt_2");//断点2
          string mytest = test.Text;   
          Response.Write(mytest);
        }
        
    }程序运行后页面正常,能出现10个动态生成的textbox,但我点按钮取某一个textbox中的值的时候却报错误“未将对象引用设置到对象的实例”;
也就是说Panel中现在并没有textbox这个对象。我跟踪调试,在断点1处PanelAuto.Controls的Count是11,且能找到每一个自己设置的textbox;
但在断点2处PanelAuto.Controls的Count变为了1,也就是说此时Panel中已没有自己添加的textbox了,请问这是为什么?我仅仅想让页面根据不同的情况出现个数不同的textbox,且能改变每个textbox的“是否只读”状态,并能取得用户在里面输入的值;
请问这种上面的方法能不能实现?

解决方案 »

  1.   

    把  if (!IsPostBack) 
    这个去掉试一试,因为你点击按钮,页面就postback进行刷新了。
    而此时你没有添加控件。可能是这个原因,或者是在if (!IsPostBack) 
    里面对PanelAuto做了什么反正应该和if (!IsPostBack) 有关
      

  2.   

    动态生成的控件 不要放
     if (!IsPostBack) 
    { 
    }你第2次执行的时候就没 运行
      for (int i = 0; i < 10; ++i)            //断点1 
            { 
                    TextBox tx = new TextBox(); 
                    tx.ID = "txt_" + i.ToString(); 
                    tx.Text = i.ToString(); 
                    PanelAuto.Controls.Add(tx);//PanelAuto为前台定义的一个Panel控件 
            } 页面就没有TEXTBOX