簡體   English   中英

動態創建控件並在回發中保存控件值 - ASP.Net C#

[英]Dynamically Create controls and save the controls values across postback - ASP.Net C#

考慮一下 -

我允許最終用戶通過獲取一些細節在ASP.Net頁面中動態創建選項卡控件。 對於添加的每個標簽,我都會得到一些設置 -

  1. 標簽標題
  2. 標簽內容
  3. 標簽頁腳鏈接

所以我得到每個標簽的這些細節。 用戶向另外一個選項卡提供了一個“添加標簽”按鈕。 因此,我需要在頁面中添加一個標簽設置面板以獲取標簽設置。 但是這樣做,我丟失了先前創建的動態標簽設置面板中輸入的值。 用戶可以添加任意數量的選項卡,並為每個選項卡輸入設置。 最后,當他們保存它時,我構建了tab控件(基於他們的設置和內容),然后我渲染控件。

由於控件是動態的,我可以選擇兩種方式 -

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

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

我會添加控件服務器端,只需記住你需要在每次回發時重新創建所有控件

您可以保存需要在viewstate中創建的任何控件的詳細信息,然后從CreateChildControls中構建控件樹

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

進入Page_Load后,您可以創建新標簽

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM