2008-12-12 8 views
0

J'ai une page ASPX qui contient un contrôle utilisateur. Le contrôle utilisateur affiche un objet métier et permet à l'utilisateur de modifier l'objet. Le contrôle utilisateur a une propriété qui contient l'objet affiché.Comment gérer les événements d'un objet enregistré en tant que propriété d'un contrôle utilisateur?

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 

J'ai récemment ajouté une nouvelle fonctionnalité à Widgets afin qu'il soulève un événement dans certaines circonstances. Je veux gérer cet événement dans mon contrôle utilisateur.

Comment connecter le gestionnaire à la propriété? Protected Sub WidgetHandler (Expéditeur ByVal en tant qu'objet, ByVal e en tant que WidgetEventArgs) Handles Me.Item.WidgetEvent ne fonctionne pas. Il génère une erreur de sérialisation indiquant que le contrôle utilisateur n'est pas sérialisable. Widgets et WidgetEventArgs sont marqués Serializable. J'ai essayé protégé WithEvents MyItem Comme Widget, a changé la déclaration de gestionnaire à ... Poignées myItem.WidgetEvent, et a ajouté MyItem = valeur au poseur d'objet, mais qui n'a fait aucune différence. J'ai également essayé d'utiliser AddHandler dans le setter mais cela n'a pas fonctionné non plus.

Quelle est la bonne façon de gérer une référence à l'objet métier dans mon contrôle utilisateur afin que je puisse gérer ses événements?

Merci

Répondre

1

Tout événement serait dans la page entraînerait une publication. Après une publication, l'événement OnLoad est déclenché pour chaque contrôle de la page, y compris votre UserControl et le widget lui-même. Vous pouvez vérifier quel événement a été déclenché dans l'événement OnLoad de votre UserControl et regarder l'objet expéditeur; Si c'est votre widget, vous pouvez agir sur cet événement. Je ne dis pas que c'est la meilleure solution, mais c'est la première solution qui me vient à l'esprit sans vraiment essayer de le faire.

Questions connexes