有人提出了类似的问题,但似乎没有一个问题可以解决我的确切情况,这就是我要做的事情.
我有一个管理学生信息的用户控件.即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控件,并清除在第一个控件中输入的文本/数据.
在此先感谢您的任何帮助.
发生的事情是,每次你做回发你以前的控制都会丢失.请记住,每个回发都使用页面类的全新实例.上次添加控件的实例在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