我有一个包含用户控件的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,但它也没有用。
在我的用户控件中维护对业务对象的引用的正确方法是什么,以便我可以处理它的事件?
由于
答案 0 :(得分:1)
页面中的任何事件都会导致PostBack。回发后,将为页面中的每个控件触发OnLoad事件,包括UserControl和窗口小部件本身。 您可以检查在UserControl的OnLoad事件中引发了哪个事件,并查看发送者对象;如果它是你的小部件,那么你可以对该事件采取行动。
我并不是说这是最好的解决方案,但这是第一个没有实际尝试的想法。