У меня есть сайт, над которым я сейчас работаю в ASP.NET 2.0, используя обычные WebForm и ASP.NET AJAX 1.0. Можно ли привязать событие к динамически созданному элементу управления после события Page.Load?
У меня есть элемент таблицы
, который я динамически создаю аналогично этому коду:
' 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). Я хочу не делать двойной пост, чтобы обновлять резюме, любые мысли полезны.