Динамические элементы управления, панели обновления и события - лучший способ достичь моего результата
-
20-08-2019 - |
Вопрос
Я выдернул свои волосы и немного заглянул в Интернет, чтобы попытаться найти элегантное решение моей проблемы. Р>
У меня есть страница ProductImages.aspx. Он показывает все изображения, связанные с этим продуктом, в динамически создаваемом списке. События привязаны к каждой картинке, чтобы вы могли обновить ее.
Это отлично работает.
Однако в конце у меня есть опция, которая позволяет мне добавить новое изображение. Это кнопка, которая запускает вызов метода AddImage. Р>
Теперь происходит то, что оригинальные элементы управления создаются и добавляются на страницу с событиями. Затем вызывается событие кнопки, воссоздающее все существующие элементы управления изображением и новое. Добавьте эту точку в новый элемент управления изображением, созданный после того, как OnInit не имеет прикрепленных событий из-за событий, добавляемых ПОСЛЕ OnInit. Р>
Я могу сделать Response.Redirect, чтобы перезагрузить страницу и запустить OnInit, чтобы снова связать события, но это выглядит очень не элегантно и разрушает смысл использования панелей обновления.
Есть идеи?
Решение
Я думаю, вы всегда можете загрузить элемент управления загрузкой изображений в div и иметь ссылку Javascript для переключения атрибута отображения div.
Или, возможно, используйте CollapsiblePanels из AjaxToolKit, чтобы скрыть и показать форму загрузки.
Я думаю, что любой из этих способов был бы более элегантным, чем отправка сообщения назад (даже если оно находится в UpdatePanel) просто для извлечения формы загрузки изображения.
Другие советы
Ваши вопросы звучат так, будто вы говорите, что не можете поместить элементы управления в OnInit, потому что они запускаются только при первой загрузке страницы. Это не тот случай - OnInit запускается при каждой загрузке страницы (включая обратную передачу), поэтому вы можете заново создавать там свои элементы управления даже при использовании панели обновления.
Одним свойством, которое отличается между начальной загрузкой и обратной передачей, является свойство Page.IsPostback, которое можно использовать для выполнения действий только при первой загрузке страницы.