动态创建的服务器控件,在页面提交后不能访问??!!!
我有一个MultiPage控件,上面要动态加几个(未知)页面,每个页面中都要动态加入一个ListBox对象,在提交后,我需要得到用户选择的列表项。
如果我在PageLoad中new这些ListBox对象,那么用户提交的信息就会被新new的对象所消除,如下所示:
...
protected TextBox tvDocTemplateNo;
...
private void Page_Load(object sender, System.EventArgs e)
{
...
if (! IsPostBack){
tvDocTemplateNo = new TextBox();
tvDocTemplateNo.ID = "tvDocTemplateNo ";
Page.Controls.Add(tvDocTemplateNo);
}
...
}
private void btnSubmit_Click(object sender, System.EventArgs e)
{
...
//在这里访问TextBox.Text,得不到用户输入的值
...
}
但不new的话,直接访问只声明的对象,会报告未给对象赋值。
如果不new,用FindControl,也不能找到对象!(注意,这里)
...
protected TextBox tvDocTemplateNo;
...
private void Page_Load(object sender, System.EventArgs e)
{
...
if (! IsPostBack){
tvDocTemplateNo = new TextBox();
tvDocTemplateNo.ID = "tvDocTemplateNo ";
Page.Controls.Add(tvDocTemplateNo);
}
...
}
private void btnSubmit_Click(object sender, System.EventArgs e)
{
...
TextBox tb;
tb = Page.FindControl("tvDocTemplateNo ")
//在这里不能找到tvDocTemplateNo
...
}
我认为,是因为我提交后,页面又重新构造了,在第一次构造时的东西都不存在了(虽然,在客户端的HTML页面中有这些对象),在新的Page对象中没有这些子控件,所以找不到了。
我想知道,如果你碰上了我这种情况,你会怎么处理。
我现在想到的唯一的解决办法就是在客户端写script,用html对象来得到用户输入的那些值。