Добавить несколько пользовательских элементов управления одного типа на страницу - PullRequest
2 голосов
/ 21 января 2009

Были заданы вопросы, подобные этому, но, похоже, ни один из них не касается моей конкретной ситуации, вот что я пытаюсь сделать.

У меня есть пользовательский элемент управления, который управляет информацией ученика. то есть имя, фамилия, адрес и т. д.

У меня есть веб-страница / форма, на которой есть кнопка. «Добавить студента». Я хочу добавить новый элемент управления 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 не добавляется ниже первого и текст / данные, введенные в первом элементе управления, удаляются.

Заранее благодарим за любую помощь.

1 Ответ

5 голосов
/ 21 января 2009

Происходит следующее: каждый раз, когда вы выполняете обратную передачу, ваш предыдущий контроль теряется. Помните, что каждый постбэк использует новый экземпляр класса вашей страницы. Экземпляр, в который вы добавили элемент управления в прошлый раз, был уничтожен , как только закончился запрос http & mdash; возможно, еще до того, как браузер завершит загрузку, это 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   
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...