2012-08-17 64 views
1

我目前有一個靜態下拉列表,其中的項目在頁面加載時從數據庫綁定。基於這個下拉列表中的選擇,我動態地在ID爲「CustomControl1」,「CustomControl2」等的表中生成一組控件。我需要做的是在下拉列表中的每個選擇都有一個獨特的不同控制類型的控制集,但它們都具有相同的ID(根據它們生成的順序)。所以,當我嘗試產生一組新的我得到這個錯誤控制:清除動態創建控件的視圖狀態以添加新控件

Failed to load viewstate. The control tree into which viewstate is being loaded must match the control tree that was used to save viewstate during the previous request. For example, when adding controls dynamically, the controls added during a post-back must match the type and position of the controls added during the initial request.

所以在頁面加載我有兩種方法,一種產生基於XML的控制,另一種是創建像這樣驗證控件:

 if (xml != "" && externalProperties.Rows.Count == 0) 
     { 
      LoadExternalProperties(xml); 
      ValidateExternalProperties(xml); 
     } 

當我做我最初的選擇,我能夠正常地生成控件,當我使控件無法生成,因爲viewstates不匹配的不同類型的控制二次選擇。

所以我認爲我需要做的是清除視圖狀態。我曾嘗試以下:

設置視圖狀態爲null(未遂Page_Init和在外面):

ViewState["CustomControl1"] = null; 

清除行的表:清除的表

externalProperties.Rows.Clear(); 

控件:

externalProperties.Controls.Clear(); 

在加載控件之前和之後切換EnableViewState:

externalProperties.EnableViewState = false; 
LoadExternalProperties(xml); 
externalProperties.EnableViewState = true; 
  • 我只需要清除視圖狀態時的下拉列表更改的選擇指標。這是因爲在接下來的步驟中(使用嚮導),我正在檢索值並將它們用於其他目的。

我目前正在跟蹤上次選擇的索引,以便弄清楚何時必須清除視圖狀態。

回答

0

你應該EnableViewState = false的下拉列表控件。

+0

需要保留下拉列表的視圖狀態。這是我根據需要清除的下拉列表值動態生成的控件的視圖狀態。 – Eric 2012-08-20 13:11:41