2009-10-14 49 views
0

我在asp.net頁面上有一個checkboxlist和textbox控件,並且這些控件是動態創建的並且被添加到頁面中。填充值並提交表單時,值在到達服務器時爲空。任何幫助?控件在提交後爲空

回答

1

它們是空的,因爲它們在頁面生命週期中被重新創建得太晚。

在不知道確切點在ASP.NET Page Lifecycle您要添加的控件(雖然我猜這是任何的Page_Load或事件處理程序),它是這樣的:

  • 生成控件樹
  • 添加動態控件
  • 渲染

(回傳)

  • 生成控件樹
  • 重新構建視圖狀態&結合郵政值
  • 添加動態控件
  • 渲染

爲了解決這個問題,你需要確保創建足夠早在你的控制生命週期。標準的做法是打破了「控制創造」到一個單獨的方法,並CreateChildControls中時,檢查,看看是否需要創建:

override CreateChildControls() 
{ 
    if(IsPostBack) 
    { 
     EnsureDynamicControlsAreAdded(); 
    } 
} 

這樣,如果他們確實需要的東西作爲最初加入作爲一個事件處理程序(例如Button_Click),在生命週期的最後階段,您可以從那裏調用相同的EnsureDynamicControlsAreAdded方法,並且在下一次往返時,它們將更早創建。

0

除了Rex M的回答,您可以嘗試在「Page_Init」事件中創建控件 - 這是頁面生命週期中的第一個事件之一,並且我通常會在viewstateless頁面中創建控件(注意:如果你這樣做,不要用「if (!IsPostback)」圍繞Page_Init處理程序的內容 - 這將阻止它按預期工作)。