2009-01-21 38 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 
相关问题