Да, есть аналогичный вопрос here. Тем не менее, этот вопрос, похоже, не привязан к нему (хотя он может быть в какой-то момент, я вижу ответы, ссылающиеся на код), и принятый ответ (и другие рекомендации) на него не дает мне, где мне нужно быть.События в ASP.NET UserControl повышают каждый другой клик?
У меня довольно сложное и откровенно не-продуманное веб-приложение VB.NET, которое я расширяю с новой функцией. Краткая форма функции заключается в том, что она позволяет административным пользователям перемещать определенные элементы на главной странице. Редизайн для веб-частей на данном этапе не является вариантом.
Административная страница, которая позволяет изменение размеров использует простые пользовательские элементы управления для представления каждого из «коробки» на домашней странице, которую можно переместить (простите мое ASCii искусство):
+------------+
| Box Title |
+------------+
| /\ |
| <X> |
| \/ |
+------------+
Четыре стрелки (и центр X - или глаз, в зависимости от видимости коробки) - ImageButton
s. Каждый Click
событие ImageButton
«ы подключен к код, подобный следующему:
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
Метод с этим кодом вызывается при каждой загрузке страницы, независимо от того, включен я или нет. (Я «сохраняю» данные, вы делаете изменения, они сохраняются в базе данных при этой обратной передаче, а затем перезагружаются.)
Другие postback, события кнопки управления пользователя не срабатывают. Они инициируют новую ретрансляцию, и на этой второй они срабатывают нормально. Поэтому, по сути, мои элементы управления требуют двух щелчков, чтобы что-то сделать.
В частности, элементы управления инициализируются в обработчике событий Page.Load
. Я опробовал PreInit
, но это не сработало, потому что остальная структура страницы еще не построена, и поэтому попытка поместить их в соответствующие PlaceHolder
s с ошибкой с NullReferenceException
. Я искал в Интернете и не видел ничего подобного, и я должен признать, что в каждом другом сценарии, когда я поднимаю события из пользовательских элементов управления (например, каждую страницу этого сайта), проблем нет. С другой стороны, это единственная страница на сайте, где пользовательский контроль с событиями динамически загружается во время выполнения ...
Я чувствую себя довольно глупым на данный момент. Любая помощь в получении событий для повышения надежности, каждый раз? Что я делаю не так?