2011-12-21 44 views
1

我有這樣的面板...控件動態添加的,不會持續

<asp:Panel ID="panSumarios" runat="server" style="border:0px solid red;width:100%" ViewStateMode="Enabled"></asp:Panel> 

...關聯到ModalPopupExtender一個div內。

然後,在一個按鈕上單擊,我會在該面板中添加一些控件(文本框)。當我關閉(確認)ModalPopupExtender時,我嘗試訪問這個文本框沒有運氣。他們不存在。看起來他們不會在回發後堅持(當我確認ModalPopupExtender時)。

任何想法?

在此先感謝。

+0

那麼回發會重新加載頁面,就像您說的那樣,並且可能會加載您添加的所有自定義控件。你有什麼代碼在Load/PreLoad/PreRender等? – 2011-12-21 16:05:57

+4

您必須在回發時重新創建文本框。將創建的控件的數量存儲在ViewState中,並將它們添加到Page_Init中具有相同的ID(可從計數器中導出,即f.e.'「TextBox_」+ counter')。 – 2011-12-21 16:10:29

回答

4

這裏有一些事情正在進行。最大的問題是HTML控件與webforms服務器控件混淆。如果添加的控件是Web表單服務器控件,另一個因素是添加動態控件的時候。

必須在Init事件中創建動態webforms服務器控件才能正確連線到viewstate。他們也必須在每個請求上創建。

+0

好吧,讓我澄清這種情況。我有一個GridView的複選框列和一些記錄。我也有一個按鈕,當我點擊它時,它會打開一個帶有此面板的ModalPopupExtender。根據網格視圖上檢查的行數(N),該按鈕添加1個文本框,1個複選框和一個乘以N的標籤。 按鈕還爲此控件設置了一些屬性。我怎樣才能在Page_Init中重新創建它們? – escar 2011-12-22 15:39:29

+0

你不會。相反,我會爲每種類型的行創建一個用戶控件。然後在與該行相關的模式中顯示/隱藏usercontrol(s)。 – 2011-12-22 15:43:41

+1

'它們也必須在每次請求時創建。從屋頂呼喊 - **也必須在每次請求時創建。** +1 btw – 2011-12-22 18:55:28