2010-01-16 78 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

相關問題