2010-01-16 64 views
0

我想按下每个按钮,文本框显示时间。 如何做到这一点?现在页面被刷新并且代码被调用,但是文本框的值不会改变。当我点击按钮时,为什么不改变文本框的值?

注:我当然不需要完全实现这一目标的新代码。我需要能够在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

正如鲁本斯所说,尝试使用'CreateChildControls'更新下面的答案中的不同方法,就像做Ruben所说的那样,这是最正确的方法。 – 2010-01-16 21:00:36

回答

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就可以使用。

+0

可悲的行为依然存在 – Peter 2010-01-16 14:09:42

+0

你把它放在哪里?调用'form1.Controls.Add(t);'时,视图状态正在加载。如果您在添加控件后只是设置文本,它也应该可以工作。 – 2010-01-16 14:51:30

+0

我已经这样做了,但它仍然无法工作(请参阅上面的代码) – Peter 2010-01-16 16:23:44

3

Dynamic Web Controls, Postbacks, and View State

如果我们需要我们动态地添加控制以维持他们的观点状态时,它是最重要的,这些控件加载视图状态阶段前加入。也就是说,在加载视图状态之前,这些控件必须存在于页面的控件层次结构中。在加载视图状态 - 初始化之前只有一个阶段。这意味着,如果我们希望我们的动态控件保持视图状态,则必须将它们添加到页面的Init事件中的控件层次结构中。

+0

你也有解决方案吗?奇怪的是,我认为这些控件是在初始阶段之后加载的? – Peter 2010-01-16 14:26:59

+0

通过重载CreateChildControls来创建动态控件 – 2010-01-16 14:34:58

相关问题