2009-01-21 87 views
2

這個問題的類似問題已被提出,但似乎沒有解決我確切的情況,這是我正在嘗試做的。向頁面添加同一類型的多個用戶控件

我有一個管理學生信息的用戶控件。即名字,姓氏,地址等。

我有一個網頁/窗體上有一個按鈕。 「添加學生」。我想要完成的是在每次點擊後將新的StudentInfo控件添加到網絡表單中。

我當前的代碼看起來是這樣的

Private Sub btnAddStudent_Click(sender as object, ByVal e As System.EventArgs) 
Dim lStudentInfo as Control 

LoadControl("~/StudentInfo.ascx") 

Me.placeholder1.controls.add(lStudentInfo) 

End Sub 

有了這個代碼只添加一個StudentInfo控制,並且在按壓一次「添加」按鈕下方的第一個和文本/添加了一個新的StudentInfo控制心不是在第一個控件中輸入的數據被清除。

在此先感謝您的幫助。

回答

5

發生了什麼事情是,每次你做回發你以前的控制丟失。請記住,每次回發都使用頁面類的全新實例。在瀏覽器甚至完成加載它的DOM之前,http請求完成—之後,您最後一次添加控件的實例是已銷燬

如果你想要一個控件存在每一個回發你必須在每一個回發

此外,如果您希望ViewState爲控件工作,您需要在頁面的加載事件之前將其添加。這意味着在Init或PreInit上。

Private Sub btnAddStudent_Click(sender as object, ByVal e As System.EventArgs) 
    Me.placeholder1.controls.add(LoadControl("~/StudentInfo.ascx")) 
    Session("NewStudentControls") += 1 
End Sub 

Protected Sub Page_Init(sender as object, e as system.eventargs) 
    For i As Integer = 1 To Session("NewStudentControls") 
      Me.placeholder1.controls.add(LoadControl("~/StudentInfo.ascx")) 
    Next 
End Sub