将相同类型的多个用户控件添加到页面

时间:2009-01-21 20:08:58

标签: asp.net user-controls

有人向我提出了类似的问题,但似乎没有一个问题可以解决我的确切情况。这就是我想要做的事情。

我有一个管理学生信息的用户控件。即FirstName,LastName,Address等。

我有一个网页/表单,上面有一个按钮。 “添加学生”。我想要完成的是每次点击后将新的StudentInfo控件添加到webform中。

我当前的代码看起来像这样

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控件,并清除在第一个控件中输入的文本/数据。

提前感谢您的任何帮助。

1 个答案:

答案 0 :(得分:5)

发生的事情是,每次你做回发时,你以前的控制都会丢失。请记住,每个回发都使用页面类的全新实例。上次添加控件的实例在http请求完成后立即被销毁 - 可能在浏览器甚至完成加载它的DOM之前。

如果您希望每次回发都存在控件,则必须在每次回发时添加

此外,如果您希望ViewState适用于控件,则需要在页面的Load事件之前添加 。这意味着在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