有人问过与此类似的问题,但似乎没有一个问题能够解决我的具体情况,这就是我正在尝试做的事情。
我有一个管理学生信息的用户控件。即名字、姓氏、地址等。
我有一个网页/表单,上面有一个按钮。 “添加学生”。我想要完成的是在每次单击后将新的 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 控件,并且会清除第一个控件中输入的文本/数据。
预先感谢您的帮助。
最佳答案
发生的情况是,每次您进行回发时,您之前的控制都会丢失。请记住,每次回发都使用页面类的全新实例。一旦 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
关于asp.net - 向页面添加多个相同类型的用户控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/466760/