создание динамических элементов управления с помощью ajax на asp.net - PullRequest
1 голос
/ 30 апреля 2009

У меня есть кнопка Добавить и удалить на моей странице. Кнопка Добавить добавляет один флажок, два текстовых поля и один выпадающий список в новую строку на моей странице. Кнопка Удалить удаляет их. У меня это хорошо работает, следуя примеру Джо Стагнера .

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

Я пытался добавить обработчик событий при создании объекта, но, похоже, он не срабатывает?

Ответы [ 5 ]

1 голос
/ 30 апреля 2009

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

  • Назначьте уникальный идентификатор для каждого пользовательского элемента управления.
  • Перезагрузите пользовательские элементы управления событиями Page_Load или Page_Init.

и чтобы все было проще, я предлагаю абстрагировать загрузку от функции, которую вы будете вызывать из Page_Load и Page_Init, как упоминалось ранее, эта функция проверит, загружен ли целевой пользовательский элемент управления, и загрузит его снова для вас, Для этого вы сохраняете загруженные идентификаторы пользовательских элементов управления в Session или viewstate.

надеюсь, это поможет.

1 голос
/ 30 апреля 2009

Похоже, у вас есть проблема жизненного цикла страницы.

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

Вот ссылка на шпаргалку для жизненного цикла страницы Asp.net.

1 голос
/ 30 апреля 2009

вам необходимо каким-то образом сохранять динамически созданные элементы управления [сеанс, состояние просмотра и т. Д.] Для каждой загрузки страницы. Пересоздайте динамические элементы управления и повторно свяжите события, используя делегаты при каждой загрузке страницы в функции preInit.

1 голос
/ 30 апреля 2009

Я думаю, что вы, вероятно, сталкиваетесь с тем, что ваша страница после каждого поста страницы полностью воссоздается - по сути, страница должна дублировать элементы управления, которые были на вашей странице, прежде чем она сможет попытаться передать постбэк (и события) им. Я думаю, что вам, вероятно, нужно сделать, это добавить код к вашей page_load, который воссоздаст динамически созданные элементы управления с теми же идентификаторами, что и у них, и зарегистрирует обработчик событий.

0 голосов
/ 17 ноября 2011

Если вы хотите сделать это без автоматической отправки назад, вы можете удалить функцию автоматической отправки назад и выбросить туда кнопку ASP. Любой сервер runat должен запускать ваши динамические обработчики событий.

...