2011-03-25 35 views
5

考慮這一點 -動態創建控件和跨回傳保存控制值 - ASP.Net C#

我允許最終用戶通過獲得一些細節的ASP.Net頁面動態創建一個標籤控件。爲了增加每一個標籤,我得到的一些設置 -

  1. 分頁標題
  2. 選項卡內容
  3. 標籤頁腳鏈接

所以我得到這些細節對於每一個標籤。爲用戶提供了一個按鈕「添加選項卡」到更多的選項卡。所以我需要在頁面中添加一個選項卡設置面板以獲取選項卡設置。但是這樣做,我失去了在先前創建的動態選項卡設置面板中輸入的值。用戶可以添加任意數量的選項卡併爲每個選項卡輸入設置。最後,當他們保存它時,我構建了選項卡控件(基於它們的設置和內容)並呈現控件。

由於控制是動態的,我能夠在兩種選擇中的事情 -

  1. 重新創建先前創建的N - 1選項卡設置面板,同時增加了第n個標籤。因此,在每次回發時,我都需要爲每個標籤重新創建設置面板。但在這種情況下,我不知道如何堅持價值觀。
  2. 使用簡單的html控件在頁面中添加設置面板,並在頁面上UnLoad解析控件 - >解析設置 - >將其保存在隱藏字段中 - >在服務器端獲取它。在這種情況下,我將失去所有需要爲控件編寫驗證腳本的服務器端功能。

有關如何更好地做到這一點的任何見解?

回答

0

我已經實現了過去的選項#1。您必須在頁面事件生命週期中的某個點重新創建控件樹,以便在查看事件以恢復視圖狀態時,它具有所需的所有控件。據我所知,在發送給客戶端之前,您還需要在完全相同的層次結構中恢復所有控件,並且在頁面呈現和視圖聲明持續存在時具有相同的名稱。如果有任何差異,加載視圖狀態將不適用於動態控制。

1

一種方法是保存需要在ViewState中重新創建標籤的數據。例如,您可以在PreRender事件期間執行此操作。在Postback上,您需要重新創建最初的控件,在層次結構中維護其原始ID和順序。您可以在LoadViewState階段執行此操作。

一旦進入Page_Load,您可以創建新標籤