Как я могу обработать событие кнопки, которое запускает создание пользовательского элемента управления? - PullRequest
1 голос
/ 03 февраля 2012

У меня есть веб-форма ASP.NET, в которой я отображаю список элементов базы данных с помощью пользовательских элементов управления, генерируя пользовательские элементы управления динамически - работает нормально.

Также на странице есть выпадающий список asp:, заполненный элементами, которые можно добавить в этот список базы данных. Вместе с этим выпадающим меню у меня есть кнопка «ДОБАВИТЬ». Мое намерение состоит в том, чтобы пользователь выбирал элемент и нажимал на него, а затем в список пользовательских элементов управления в форме будет добавлен этот новый элемент.

У меня все это работает.

Моя проблема в том, что в пользовательском элементе управления есть кнопка «УДАЛИТЬ», которая удаляет выбранный элемент из списка. Это работает, ЗА ИСКЛЮЧЕНИЕМ, когда я добавляю новый элемент. Поскольку мое событие кнопки «Добавить» всегда вызывается после Page_Load, даже если я регенерирую список пользовательских элементов управления, события щелчка внутреннего пользовательского элемента управления не будут срабатывать, поскольку элементы управления не были созданы как часть Page_Load.

Мне нужно знать, что я делаю неправильно, или лучшие практики здесь, любые советы. Я пытался быть точным в описании проблемы, но если мне это не удалось, дайте мне знать, и я могу добавить больше деталей.

ПРОСТОЕ ВОССТАНОВЛЕНИЕ: мне нужно знать, как добавить динамически созданный пользовательский элемент управления на страницу с помощью события нажатия кнопки страницы, и при этом все еще должны запускаться события внутреннего щелчка (и т. Д.) Пользовательского элемента управления.

Спасибо за любую помощь.

РЕДАКТИРОВАТЬ: Основываясь на отзывах джентльменов здесь и проведя дальнейшие исследования, связанные с их предложениями, я в итоге реализовал решение, основанное на том, что представлено на этой странице:

http://ryanfarley.com/blog/archive/2005/03/11/1886.aspx

Вот фрагмент, показывающий, как я справился с этим. Этот фрагмент находится в моем обработчике событий PreInit. Не совсем элегантное оружие для цивилизованного века, но иногда бластер - это все, что вам нужно.

'Look to see if button for adding a new client number has been
'clicked.  If so, call the sub to add the item NOW, so that it
'is able to have it's internal click events fire.
For Each control_string As String In Request.Form
  Dim ctl As Control = Page.FindControl(control_string)

  If (ctl IsNot Nothing) AndAlso (ctl.ID = "cmdAddClientNumber") Then
    Me.AddClientNumberToList()
    Exit For
  End If
Next

Ответы [ 2 ]

1 голос
/ 03 февраля 2012

В обработчике кнопок вы изначально добавляете UserControl на страницу.В OnPreInit (который затем будет запущен, когда пользователь нажмет кнопку «Удалить» в UserControl), вы должны повторно добавить UserControl - чтобы он существовал и мог обрабатывать событие кнопки «Удалить».Вам нужно будет разработать собственный механизм отслеживания состояния, чтобы определить, что вам нужно добавить UserControl во время PreInit.Я обычно использую ViewState, о чем свидетельствует этот, на первый взгляд, похожий пост .

1 голос
/ 03 февраля 2012

Аналогичный вопрос: Как создать и использовать пользовательский элемент управления с помощью UpdatePanel, добавленной на страницу программным способом

Динамическое управление необходимо повторно добавить в дерево элементов управления OnPreInit, см. Документацию:

PreInit - создание или повторное создание динамических элементов управления.

Обзор жизненного цикла страницы ASP.NET

...