Элементы управления динамической страницей ASP.NET: можно ли привязать события ПОСЛЕ Page.Load?

У меня есть сайт, над которым я сейчас работаю в ASP.NET 2.0, используя обычный материал WebForm и ASP.NET AJAX 1.0. Можно ли привязать событие к динамически создаваемому элементу управления после события Page.Load?

У меня есть элемент table <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). Я не хочу делать двойной пост, чтобы обновить сводку, любые мысли полезны.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
4 503
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Вы должны добавить элементы управления перед Page.Load, чтобы поддерживать ViewState между обратными передачами, поэтому используйте для этого обработчик событий OnInit.

Но как только они будут добавлены, вы сможете привязать обработчики событий (например, OnClick) в любой момент во время или после Page.Load ... например, в ItemDataBound вашей сетки (или что-то в этом роде) или в Page.PreRender .

Моя самая большая проблема - текущие данные, которые мне нужно отображать, доступны только после Page.Load.

Bryan Rehbein 26.11.2008 21:09

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

Bryan Rehbein 26.11.2008 21:14
Ответ принят как подходящий

Вам необходимо отправить обратно всю страницу после того, как ваши данные изменятся в «событии btnClick в другом месте на странице». Похоже, у вас есть UpdatePanel, и похоже, что это перехватывает обратную передачу вашего обработчика событий btnClick. Поместите btnClick за пределы UpdatePanel или измените его триггеры, чтобы ваш btnClick принудительно выполнял обратную передачу / обновление ваших данных. Или измените дизайн своей таблицы, чтобы она обновлялась AJAXly, когда вы нажимаете на btnClick, трудно получить более подробную информацию, не зная больше о структуре вашей страницы и элементах управления.

Удачи!

Вот что я сделал: я сохранил записи, а затем сделал Server.Transfer на ту же страницу, чтобы повторно сгенерировать сводный раздел - это своего рода хакерский прием, но он работает и не требует двойной обратной передачи (однако страница цикл выполняется дважды с помощью этого метода).

Bryan Rehbein 10.12.2008 18:20

Вы можете привязаться к событию, когда захотите. В конце концов, это просто событие. Но не все места могут быть подходящими, потому что вы должны учитывать, когда начинается событие. И в большинстве случаев это происходит между Page_Load и Page_PreRender. Это включает событие щелчка на LinkButton. В общем, я бы рекомендовал добавлять ваши динамически создаваемые элементы управления на этапе Page_Init.

Другие вопросы по теме