Как мне обрабатывать события из объекта, сохраненного как свойство пользовательского элемента управления? - PullRequest
0 голосов
/ 12 декабря 2008

У меня есть страница aspx, которая содержит пользовательский элемент управления. Пользовательский элемент управления отображает бизнес-объект и позволяет пользователю редактировать объект. Пользовательский элемент управления имеет свойство, которое содержит отображаемый объект.

Public Property Item() As Widget       
    Get
        If ViewState("Item") IsNot Nothing Then
            Return DirectCast(ViewState("Item"), Widget)
        End If
        Return Nothing
    End Get
    Private Set(ByVal value As Widget)
        ViewState("Item") = value
    End Set
End Property

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

Как мне подключить обработчик к Собственности? Защищенный Sub WidgetHandler (ByVal отправитель как объект, ByVal e как WidgetEventArgs) Обрабатывает Me.Item.WidgetEvent не работает. Выдает ошибку сериализации, указывающую, что пользовательский элемент управления не сериализуем. Виджеты и WidgetEventArgs помечены как Сериализуемые. Я попытался Protected WithEvents myItem As Widget , изменил объявление обработчика на ... Обрабатывает myItem.WidgetEvent и добавил myItem = value в Setter элемента, но это не имеет значения. Я также пытался использовать AddHandler в сеттере, но он тоже не работал.

Как правильно сохранить ссылку на бизнес-объект в моем пользовательском элементе управления, чтобы я мог обрабатывать его события?

Спасибо

1 Ответ

1 голос
/ 13 декабря 2008

Любое событие на странице вызовет PostBack. После обратной передачи событие OnLoad запускается для каждого элемента управления на странице, включая ваш UserControl и сам виджет. Вы можете проверить, какое событие было вызвано в событии OnLoad вашего UserControl, и посмотреть на объект отправителя; если это ваш виджет, то вы можете воздействовать на это событие.

Я не говорю, что это лучшее решение, но первое, которое приходит на ум, фактически не пытаясь это сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...