单击按钮时,为什么文本框的值不会改变?

时间:2010-01-16 13:40:35

标签: asp.net

我希望按下每个按钮,文本框显示时间。 怎么做到这一点?现在刷新页面并调用代码,但文本框的值不会改变。

注意:我当然不需要完全实现新代码。我需要能够在asp文件的代码隐藏文件中完成它。

protected void Page_Load(object sender, EventArgs e)
    {
        TextBox t = new TextBox();

        t.ID = "time";


        Button submit = new Button();
        submit.Text = "Update";
        submit.UseSubmitBehavior = true;

        form1.Controls.Add(t);
        form1.Controls.Add(submit);
        t.Text = DateTime.Now.ToString();

    }

2 个答案:

答案 0 :(得分:3)

来自Dynamic Web Controls, Postbacks, and View State

  

如果我们需要动态添加的控件来维护其视图状态,那么在Load View State阶段之前添加这些控件是至关重要的。也就是说,在加载视图状态之前,这些控件必须存在于页面的控件层次结构中。加载视图状态 - 初始化之前只有一个阶段。这意味着,如果我们希望动态控件保持视图状态,我们必须将它们添加到页面的Init事件中的控件层次结构中。

答案 1 :(得分:3)

<强>更新
尝试这种方法,在错误的地方创建子控件会导致像上面所见的奇怪效果,因为事件顺序全部关闭,例如页面的加载在控件的Init之前触发。 CreateChildControls发生在页面的PreRender事件中,您可以看到here for a full breakdown。有关何时加载ViewState的参考:this is a better view

private TextBox t;

protected override void CreateChildControls()
{
  base.CreateChildControls();

  t = new TextBox {ID = "time"};
  Button submit = new Button {Text = "Update", UseSubmitBehavior = true};
  Form.Controls.Add(t);
  Form.Controls.Add(submit);
}

protected void Page_Load(object sender, EventArgs e)
{
  t.Text = DateTime.Now.ToString();
}

由于ASP.Net默认只使用一个表单,因此页面可以使用Form property