我动态的生成了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的“是否只读”状态,并能取得用户在里面输入的值;
请问这种上面的方法能不能实现?
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的“是否只读”状态,并能取得用户在里面输入的值;
请问这种上面的方法能不能实现?
这个去掉试一试,因为你点击按钮,页面就postback进行刷新了。
而此时你没有添加控件。可能是这个原因,或者是在if (!IsPostBack)
里面对PanelAuto做了什么反正应该和if (!IsPostBack) 有关
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