这段代码是为asp.net网站编写的,v2005
System.Web.UI.WebControls.TextBox txtEFName = new System.Web.UI.WebControls.TextBox();
phFname.Controls.Add(txtEFName);
placeHolder1.Controls.Add(TextBox1);
执行此代码时,即使输入一些字符串,也始终显示文本框“”的值。
请帮忙。
答案 0 :(得分:3)
每次加载页面时都需要重新创建动态控件。因此,您需要在Page_Init事件期间执行该代码。 注意:您需要为此控件指定一个唯一ID,每次加载页面时都会保持不变。
为什么这一切?
由于控件未包含在标记(.aspx文件)中,因此每次加载页面时都需要再次添加。那么它如何保持其价值呢?该值将存储在ViewState中,只要控件具有相同的ID,就会使用正确的值重新填充。
为了让事情顺利进行,让我们将用于添加控件的代码放在一个单独的函数中。
Private void AddMyControl()
{
System.Web.UI.WebControls.TextBox txtEFName = new System.Web.UI.WebControls.TextBox();
txtEFName.ID = something unique;
phFname.Controls.Add(txtEFName);
}
所以我们可以从click处理程序和Page_Init处理程序中调用它,但是如果我们已经单击,我们只需要在Page_Init中调用它。所以让我们将它作为一个标志存储在一个Session变量中(如果你愿意的话,你也可以将它存储在ViewState中,但是现在就让它保持这种状态)。所以我们的点击处理程序现在看起来像这样:
void ButtonSomething_Click(Object Sender, EventArgs e)
{
AddMyControl();
Session["MyControlFlag"] == true;
}
现在我们需要Page_Init处理程序:
Public void Page_Init(Object Sender, EventArgs e)
{
if(Session["MyControlFlag"]!=null && (bool)Session["MyControlFlag"])
AddMyControl();
}