我希望按下每个按钮,文本框显示时间。 怎么做到这一点?现在刷新页面并调用代码,但文本框的值不会改变。
注意:我当然不需要完全实现新代码。我需要能够在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();
}
答案 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。