如何处理保存为用户控件属性的对象的事件?

时间:2008-12-12 16:21:10

标签: asp.net events

我有一个包含用户控件的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

我最近为Widgets添加了一项新功能,以便在某些情况下引发事件。我想在我的用户控件中处理该事件。

如何将处理程序连接到属性? 受保护的Sub WidgetHandler(ByVal sender as Object,ByVal e as WidgetEventArgs)Handles Me.Item.WidgetEvent 不起作用。它抛出序列化错误,指示用户控件不可序列化。 Widgets和WidgetEventArgs标记为Serializable。 我尝试受保护的WithEvents myItem As Widget ,将处理程序声明更改为 ...处理myItem.WidgetEvent ,并将 myItem = value 添加到项目中塞特,但这并没有什么区别。我也尝试在setter中使用AddHandler,但它也没有用。

在我的用户控件中维护对业务对象的引用的正确方法是什么,以便我可以处理它的事件?

由于

1 个答案:

答案 0 :(得分:1)

页面中的任何事件都会导致PostBack。回发后,将为页面中的每个控件触发OnLoad事件,包括UserControl和窗口小部件本身。 您可以检查在UserControl的OnLoad事件中引发了哪个事件,并查看发送者对象;如果它是你的小部件,那么你可以对该事件采取行动。

我并不是说这是最好的解决方案,但这是第一个没有实际尝试的想法。