Surcharge de classe / ou comment se passer proprement des objets d'un aspx à un ascx (vb.net)

Contenu du snippet

Cette structure est une variation d'une une idée de Nix ;) (et oui, encore lui héhé ;)

Et bien, normalement, il suffit d'utiliser 3 lignes de code dans l'ASCX comme :

Dim monObjet As Objet
Dim Lapage as Page
Lapage = Me.Parent.Page
monObjet = Lapage.monObjet

PROBLEME !!!! dans le concepte c'est correct, mais ça compile pas !!
car l'ascx ne connait pas encore la page parente ! Donc il refuse "Lapage.monObjet" !

Une méthode simple consiste à créer une nouvelle classe Page héritant de la classe Page système, afin de lui ajouter une donnée public suplémentaire ;)

Voici une solution que je trouve très propre !
et sans variable de session bien sûr ! (travailler avec les variables de session, c'est du bricolage !)

Source / Exemple :


Ajouter une classe à votre projet de site nommée Page qui hérite de la classe System.Web.UI.Page
et vous déclarez l'objet que vous voulez communiquer dedans ;)
La nouvelle classe Page sera donc une System.Web.UI.Page avec une donnée public supplémentaire ;)

Exp : (Page.vb)

Namespace monNamespace 

    Public Class page
        Inherits System.Web.UI.Page

        Public monObjet As New Objet()'instanciation de votre Objet

    End Class

End Namespace

Ensuite, il ne reste plus qu'a modifier le CodeBehind de votre page ASPX en changeant son héritage ;)
Remplacez le 
	Inherite System.Web.UI.Page
par
	Inherite maSolution.monNamespace.Page

Ensuite dans le load de la page, vous pouvez utiliser votre objet afin de l'initialiser ;)
ATTENTION utilisez le directement, sans le re-déclarer !

exp : (UnePage.aspx)

Namespace moteurSite
    Public Class moncompte
        Inherits maSolution.monNamespace.Page 'remarquez que l'on hérite à présent de notre nouvelle classe, et plus de la classe Page habituelle !
        Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
		
		monObjet.maMethode

        End Sub
    End Class
End Namespace

Avec cette construction, rien de plus simple que de récupérer dans l'ascx, l'objet de l'ASPX ;)
Il suffit d'instancier un nouvel objet, de l'initialiser avec la propriété Parent ;) c'est bon ;)

Exp : (monfichier.ascx)

Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Dim monObjet As Objet
	    Dim Lapage as Page
            Lapage = Me.Parent.Page
            monObjet = Lapage.monObjet
End Sub

et voila ;)

Cette méthode permet par exemple de conserver les données d'un utilisateur de façon propre dans toute une page (même si celle-ci comporte des ascx ;)
et sans variable de session (pas stable les sessions)

Bon Code !!

Conclusion :


J'espère que j'ai été limpide !
sinon n'hésitez pas à me reprendre !

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.