textbox不接受asp.net中的值

时间:2013-10-03 19:05:18

标签: c# asp.net

这段代码是为asp.net网站编写的,v2005

System.Web.UI.WebControls.TextBox txtEFName = new System.Web.UI.WebControls.TextBox();
phFname.Controls.Add(txtEFName);
placeHolder1.Controls.Add(TextBox1);

执行此代码时,即使输入一些字符串,也始终显示文本框“”的值。

请帮忙。

1 个答案:

答案 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();
}