2012-05-17 93 views
0

我有一個頁面,在用戶瀏覽一系列問題時動態生成控件。避免在動態創建的控件上回發

當他們完成表格後,他們點擊一個提交按鈕,我收集他們輸入的信息並將其存儲在數據庫中。

目前,我創建幾個這些控件與

.AutoPostBack = True 

其結果是,每當用戶更改文本和標籤到下一個字段,回傳時,下一個領域失去焦點。

如果我設置

.AutoPostBack = False 

則將焦點問題消失,但在結束的時候我收集的數據,沒有什麼用戶在這些控件中輸入實際上是提供給客戶端的代碼,因爲它尚未發佈。

我想請執行下列操作之一:

  1. 在年底有一個很大的回傳
  2. 具有標準的回發不上的控件失去焦點,因爲我離開他們
  3. 別的東西,我的天堂沒想到......?

有什麼建議?

+1

您可以使用viewstate在回發之間存儲和檢索數據。 –

回答

2

動態創建控件的關鍵是在頁面lifecyle中添加控件。要保留視圖狀態並使動態控件保持張貼的值,控件需要不遲於OnInit()添加。

此外,控件需要重新添加上頁面加載,回發與否。關於@KennyZ關於保證每個控件的ID相同的說法,只要您按照相同的順序添加相同數量的控件,.NET將保證ID是相同的。

關於AutoPostBack屬性,當我們想要執行某些由用戶更改控件值觸發的操作時,通常只設置爲True。一個常見的例子是一個下拉列表;取決於用戶選擇的內容,將不同的數據加載到頁面的詳細信息部分。因此,每次用戶更改值時,我們都想要回發並獲取新數據以顯示。

從我對您的使用案例的理解中,我會爲整個表單建議一個回傳。

2

它已經有一段時間了,因爲我搞砸了這些,但我記得需要重新添加動態控件(頁面加載或init?我忘了),確保我保證每個動態添加的控件的ID相同它在添加時得到,在我可以訪問任何來自ViewState的用戶輸入數據之前。

我還記得使用SessionState跟蹤我添加的內容,所以我知道我需要爲ViewState構造什麼。

它感覺就像kludgy這樣做,然後,因爲它現在聽起來描述它。祝你好運。