У меня есть сайт, над которым я сейчас работаю в ASP.NET 2.0, используя обычный материал WebForm и ASP.NET AJAX 1.0. Можно ли привязать событие к динамически создаваемому элементу управления после события Page.Load?
У меня есть элемент таблицы ‹td›, который я динамически создаю аналогично этому коду:
' Create Link Button
lnk.ID = String.Format("lnkDetails_{0}", dr("Id"))
lnk.Text = dr("Name").ToString()
lnk.CommandArgument = dr("Id").ToString()
AddHandler lnk.Click, AddressOf DetailsLink_Click
cName.Controls.Add(lnk)
Этот код зацикливается для каждой строки в базе данных (и, конечно же, в таблицу добавляется больше ячеек, в том числе ImageButton с событием. События работают безупречно, когда я выполняю этот код во время событий, ведущих к Page.Load включительно. . Мне нужно заполнить эту таблицу текущими данными, которые обновляются во время события btnClick в другом месте страницы, которое происходит после этого события Page_Load, поэтому я заполняю старые данные. Если я изменю этот код на Page.LoadComplete , события перестают работать.
Эти данные представляют собой сводное отображение различных компонентов приложения, таких как чье-то имя, которое при обновлении в форме «подробностей» обновляет базу данных путем частичной обратной передачи (требование), а затем необходимо отображать обновление в этом «сводке». 'после обновления. В настоящее время требуется 2 постбэка, чтобы увидеть изменения в разделе «Сводка», поэтому фактически сводка отстает от изменений на 1 шаг (ясно, как грязь?)
Каким будет лучший способ для меня заполнить эту таблицу текущими данными (которые доступны во время / после Page.LoadComplete), но по-прежнему иметь срабатывание события при нажатии ссылки (событие заставляет UpdatePanel отображать `` подробности '' форма).
У меня также есть jQuery и обычные методы ASP.NET AJAX, а также javascript является требованием для веб-сайта, поэтому мне не нужно переходить на использование неподдерживаемых браузеров.
Это мое первое веб-приложение ASP.NET, и мне нужна помощь в выяснении наилучшего способа сделать это (я хорошо разбираюсь в PHP, Django и обычных способах создания веб-форм - например, наличие нескольких форм на одной странице o_O).
Обновлять:
На самом деле нет хорошего способа привязать управляющие события к элементам управления после Page_Load. Общая архитектура страниц заключается в том, что существует одна форма ASP.NET, охватывающая всю страницу, есть только одна страница aspx. Я использую главные страницы (однако это не имеет очевидных последствий для моей проблемы).
Страница разделена на левую и правую «панель», левая - это сводка всех данных (на панели обновлений), правая «панель» имеет 6 «вкладок», каждая из которых реализована как отдельный пользовательский элемент управления, каждая с несколькими поля формы и кнопка обновления - все в собственном UpdatePanel.
При обновлении любой из этих вкладок обновляется только панель сводки (UpdatePanel.update()
) и ее собственная панель. «Обновление» и привязка событий динамических элементов управления сводкой из базы данных происходит во время Page_Load, а событие кнопки «Обновить» обновляет данные базы данных. (Событие управления происходит после Page_Load). Я не хочу делать двойной пост, чтобы обновить сводку, любые мысли полезны.