2012-03-05 42 views
3

我在後面的代碼中以編程方式向頁面添加控件。我添加一個asp:Label並設置它的Text值。我添加一個asp:TextBox並設置它的文本值。兩個文本值都在Response中返回並顯示在瀏覽器中。迄今爲止都很好。丟失<asp:Label>來自ViewState的文本值用於動態添加控件

用戶執行導致回發的操作。我重新加載動態添加的asp:Label和asp:TextBox。當Response返回給瀏覽器時,只顯示asp:TextBox Text值。 asp:標籤文本值不是。

如果我檢查HTML,我可以看到asp:Label控件(呈現爲HTML span標籤)但沒有任何價值。

如何獲取代碼以在每次回發時自動重新加載asp:Label的Text值?爲什麼asp:Label和asp:TextBox的行爲不同?我不想在每次回發中手動重新設置文本值。

這是類似於什麼,我做了一些代碼(placeHolderNameplates是一個asp:aspx頁面上的佔位符控件):

Protected Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Init 
    If Not Page.IsPostBack Then 
     Dim lbl As Label = New Label() 
     lbl.ID = "xxx1" 
     lbl.Text = "yo" 
     placeHolderNameplates.Controls.Add(lbl) 

     Dim tb As TextBox = New TextBox 
     tb.ID = "xxx2" 
     tb.Text = "yoyo" 
     placeHolderNameplates.Controls.Add(tb) 

    Else 
     Dim lbl As Label = New Label() 
     lbl.ID = "xxx1" 
     placeHolderNameplates.Controls.Add(lbl) 

     Dim tb As TextBox = New TextBox 
     tb.ID = "xxx2" 
     placeHolderNameplates.Controls.Add(tb) 

    End If 

回答

4

你需要做的是設置值之前的控件添加到佔位符,所以它應該是 Dim lbl As Label = New Label()
placeHolderNameplates.Controls.Add(lbl)
lbl.ID = "xxx1"
lbl.Text = "yo"

看到這些帖子詳情請見: http://www.yakkowarner.com/2008/01/aspnet-dynamic-controls-and-viewstate.html http://codebetter.com/jefferypalermo/2004/11/25/key-to-ensuring-dynamic-asp-net-controls-save-viewstate-level-300/

將它們添加到頁面之前,它們沒有初始化它們自己。當一個動態控件被添加到另一個控件時,新控件就會趕上父控件所處的階段。例如,如果在你的Page_Load中添加一個文本框,它將起到追趕效果通過其Init和Load階段。這很重要,因爲它會開始跟蹤其視圖狀態。在跟蹤viewstate之前添加的值不會使其處於查看狀態,並且會在回發時丟失。

相關問題