ASP.NET动态创建的文本框不会更改值

时间:2016-02-02 12:43:45

标签: c# asp.net web webforms

我有以下问题: 我在我的网页中动态创建一个TextBox,其值为" initialVal"在一开始的时候。 现在我需要对服务器进行回发(而不是回调),在此操作期间,我需要计算/更改文本框的值为其他值。

以下是一个例子:

protected void Page_Load(object sender, EventArgs e)
    {
        TextBox txtBox = new TextBox();
        txtBox.ID = "newButton";
        form1.Controls.Add(txtBox);
        txtBox.Text = "initialVal";

        if (IsPostBack && Session["change"] == null)
        {
            txtBox.Text = "change";
            Session["change"] = true;
        }
    }

问题:即使我通过代码更改了值,文本框也会保留文本" initialVal"。我觉得这与视角状态有关,但我不明白。 Coudl有人请帮帮我吗?

感谢。

4 个答案:

答案 0 :(得分:1)

在!IsPostBack

中创建动态文本框创建
    protected void Page_Load(object sender, EventArgs e)
        {
if(!isPostBack){
            TextBox txtBox = new TextBox();
            txtBox.ID = "newButton";
            form1.Controls.Add(txtBox);
            txtBox.Text = "initialVal";
    }
            if (IsPostBack && Session["change"] == null)
            {
                txtBox.Text = "change";
                Session["change"] = true;
            }
        }

如果您的问题仍未解决,请与我们联系

答案 1 :(得分:1)

每次加载页面时都会运行:

txtBox.Text = "initialVal";

你应该将它包装在支票回复中:

if (!Page.IsPostback)
{
    txtBox.Text = "initialVal";
}

也就是说,onLoad是创建错误的事件,因为它在页面生命周期的早期有效,请使用OnInit
请参阅此article on MSDN

以下是来自@ user2890888的最终代码:

public partial class WebForm1 : System.Web.UI.Page 
{ 
  TextBox txtBox = null; 

  protected void Page_Init(object sender, EventArgs e) 
  { 
    txtBox = new TextBox(); 
    txtBox.ID = "newButton"; 
    form1.Controls.Add(txtBox); 
  } 

  protected void Page_Load(object sender, EventArgs e) 
  { 
     if (!IsPostBack) 
     { 
       txtBox.Text = "initialVal"; 
     } 

     if (IsPostBack && Session["change"] == null) 
     { 
       txtBox.Text = "change"; 
       Session["change"] = true; 
      } 
   } 
}

答案 2 :(得分:0)

找到 TextBox 并使用它

TextBox txtBox = (TextBox)FindControl("txtBox");
txtBox.Text = "change";

答案 3 :(得分:0)

即使现在你遇到问题,你的textBox也没有得到你需要的价值。 将TEXTBOX的新值存储在隐藏字段中。 我的意思是,

 if (IsPostBack && Session["change"] == null)
{
   hiddenfield1.value = "change";    
}

以及稍后在页面脚本中,您可以将此hiddenfield1中的值分配回文本框。

$(document).ready(
{
$('#txtBoxID').value=$('#hiddenfield1').value;
}
);