2009-11-04 67 views
8

使用LoadControl(字符串路徑)以編程方式添加用戶控件時,在用戶控件的頁面生命週期中,它是否使用其視圖狀態初始化其子控件?ASP.NET:Viewstate並以編程方式添加用戶控件

我在問這個問題,因爲我的一個用戶控件被程序加載了一個TextBox控件,它沒有在Page_Load事件的PostBack上被ViewState初始化/加載(這不是普通的情況。 aspx頁面,因此我的困惑)。總的來說,我需要從Textbox控件中檢索值。

感謝

回答

11

的ViewState Page_Load事件之前加載。如果您希望您的控件能夠與ViewState一起使用,則需要加載該控件並將其添加到通常位於PreInit上的事件—之前的頁面中。

生命週期參考這裏:
http://msdn.microsoft.com/en-us/library/ms178472.aspx?ppud=4

閱讀說明爲Pre Load事件,立即之前頁面加載:如果您需要在您的網頁上進行處理

使用這個事件或在Load事件之前進行控制。

在Page實例引發此事件之前,它會爲其自身和所有控件()加載視圖狀態,然後處理包含在請求實例中的任何回發數據。

因此,通過預加載時間已經太晚了。另外,PreInit事件的描述特別提到它是「創建或重新創建動態控件」的地方。

+0

謝謝!在相關說明中,我以編程方式添加的用戶控件發生在另一個正在聲明性加載的用戶控件中。這個聲明的父級用戶控件的PreInit事件不會被觸發(所以方法'protected void Page_PreInit(object sender,EventArgs e)'不會被調用)。 你知道爲什麼Page_PreInit不會在這個聲明的用戶控件中被調用嗎? – burnt1ce 2009-11-04 17:37:16

+0

控件本身沒有預初始化,因爲控件頁生命週期事件是從頁面調用的,並且在PreInit點上,控件還沒有完全準備好。改用Init。 – 2009-11-04 17:45:01

+0

非常感謝。你的建議救了我。 =) – burnt1ce 2009-11-05 14:51:11

相關問題