Да, есть похожий вопрос здесь . Тем не менее, к этому вопросу, похоже, не прикреплен код (хотя он может иметь место в какой-то момент; я вижу ответы, ссылающиеся на код), и принятый ответ (и другие советы) по нему не дают мне того, что мне нужно быть.
У меня довольно сложное и откровенно не очень хорошо разработанное веб-приложение VB.NET, которое я расширяю новой функцией. Краткая форма этой функции заключается в том, что она позволяет администраторам размещать определенные элементы на домашней странице. Редизайн для веб-частей на данном этапе не подходит.
Административная страница, которая позволяет изменять размеры, использует простые пользовательские элементы управления для представления каждого из «ящиков» на домашней странице, которые можно переместить (простите, мой ascii art):
+------------+
| Box Title |
+------------+
| /\ |
| < X > |
| \/ |
+------------+
Четыре стрелки (и центр X - или глазок, в зависимости от видимости коробки) равны ImageButton
с. Каждое ImageButton
событие Click
связано с кодом, подобным следующему:
RaiseEvent WidgetMoved(Me, New WidgetMovedEventArgs(WidgetMoveDirection.Up, widgetIDField.Value))
Страница хостинга (которая находится на MasterPage
) инициирует эти пользовательские элементы управления после привязки к данным, которые определяют, где они расположены:
For i as Integer = 0 To count
Dim widget As MyWidget = widgets(i) '' widgets is a collection
Dim box as controls_CustomizeWidget = BindWidget(WidgetColumns.Left, i, count, widget) '' This simply uses LoadControl and places the control in one of two placeholders
AddHandler box.WidgetMoved, AddressOf widget_WidgetMoved
AddHandler box.WidgetVisibleChanged, AddressOf widget_WidgetVisibleChanged
Next
Метод с этим кодом вызывается при каждой загрузке страницы, независимо от того, нахожусь ли я в обратной передаче или нет. (Я «живу-сохраняю» данные; вы вносите изменения, они сохраняются в базе данных при обратной передаче, а затем перезагружаются.)
Каждый другой постбэк, события пользовательской кнопки управления не запускаются. Они инициируют новый постбэк, и на этот второй они стреляют нормально. Поэтому, по сути, мои элементы управления требуют двух кликов, чтобы что-нибудь сделать.
В частности, опять же, элементы управления инициализируются в обработчике событий Page.Load
. Я попробовал PreInit
, но это не сработало, потому что остальная часть структуры страницы еще не построена, и поэтому попытка поместить их в соответствующие им PlaceHolder
не удалась с NullReferenceException
. Я искал в Интернете и не видел ничего подобного, и я должен признать, что в любом другом сценарии, когда я генерирую события из пользовательских элементов управления (например, каждая страница этого сайта), есть Нет проблем. С другой стороны, это единственная страница на сайте, где пользовательский элемент управления с событиями динамически загружается во время выполнения ...
В данный момент я чувствую себя довольно чертовски тупым. Любая помощь, чтобы события были подняты надежно, каждый раз? Что я делаю не так?