2011-11-21 40 views
1

我有一個問題,即使存在非常類似的問題,但我似乎找不到解決方案。以編程方式添加Web控件時的postBack問題

基本上我有我的Page_Load方法以編程方式創建的文本框。他們充滿了某些cookie的價值。

然後我有一個'更新'按鈕,點擊後,它應該更新加載到文本框中的cookie。

因此,我給了文本框的ID,與cookie相同的名稱,然後在更新按鈕的On_Click方法中,我循環訪問文本框,並用cookie中的值更新cookie(ID名稱)文本框。

但是,這是行不通的。我試過的如下。

控件只是在onload方法中創建的。然後,當您更改文本框後單擊該按鈕時,再次調用onload方法,從而將文本框更改回原始並按照原來的方式進行更新。

在檢查if (!Page.IsPostBack)後,控件在onload方法中創建。這不起作用,因爲首先調用頁面加載方法,並且不會在屏幕上創建控件。你的左邊是空白屏幕,沒有更新的cookies。

我試過EnableViewState哪些沒有工作,我試圖創建自己的控件時(Page.IsPostBack)但仍然沒有。

任何想法?

+0

你真的確實需要像這樣以編程方式創建控件嗎?你正在爲自己做更多的事情。如果你需要一個動態的*數字*的控件,最簡單的方法是使用'Repeater'。如果你確實需要繼續這樣做,這一系列的博客文章將會非常有幫助:http://weblogs.asp.net/infinitiesloop/archive/2006/08/25/TRULY-Understanding-Dynamic-Controls-_2800_Part -1_2900_.aspx –

+0

我看着一個Repeater。從來沒有聽說過它。我從來沒有經常以編程方式進行控制,只是在這種情況下,我永遠不會知道我在頁面上有多少。 – MichaelMcCabe

回答

3

應該在onLoad方法中創建控件並在if (!Page.IsPostBack)代碼塊中爲它們提供初始值。這樣您每次都會創建控制樹,但不會重新初始化丟失更新值的值。

+0

+1關於使用onLoad的好處是,您可以訪問頁面上的其他控件的值,並且同時您的新控件在回發時將設置其值。 –

1

您應該在Init事件期間創建控件,並且您需要在每次加載時都這樣做(不檢查IsPostBack)。爲了讓這些控件提升回發並從視圖狀態設置它們的屬性,它們需要在觸發事件之前進入頁面架構。

如果您只是在Init過程中創建控件,然後在檢查IsPostBack後僅設置Load事件中的數據,則它們將保留在網站上輸入的文本,因爲它們將首先被初始化,然後從視圖狀態數據填充。

相關問題