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

0/5 (5 avis)

Snippet vu 10 602 fois - Téléchargée 36 fois

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

Ajouter un commentaire Commentaires
seb7272 Messages postés 4 Date d'inscription mardi 16 décembre 2003 Statut Membre Dernière intervention 16 août 2004
25 oct. 2006 à 17:50
je cherche à faire le même genre de chose mais je n'y arrive pas, bien que la réponse semble être dans ce code.

voici mon exemple si quelqu'un peut m'aider :

-j'ai une pagehaut.ascx avec label et bouton
-j'ai une page masterpage avec usercontrol (pagehaut.ascx)
-j'ai une page default.aspx s'appuyant sur masterpage

Comment bouger les propriétés de mon label et de mon bouton dans la page default.aspx sachant que les objets sont dans pagehaut.ascx de la masterpage.
Merci de votre aide
Sébastien
cs_regi Messages postés 12 Date d'inscription jeudi 27 février 2003 Statut Membre Dernière intervention 4 mai 2005
23 déc. 2004 à 09:01
moi aussi
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
6 janv. 2004 à 21:55
Je trouve ca tres bien
cs_vladam Messages postés 216 Date d'inscription dimanche 13 janvier 2002 Statut Modérateur Dernière intervention 7 novembre 2009
30 avril 2003 à 17:25
peut-être bien ... pour ma part, tout a bien fionctionné en localhost, ainsi qu'en production ... c'est utilisé sur le site http://www.stevimmac.com
cs_Mikax Messages postés 13 Date d'inscription jeudi 4 avril 2002 Statut Membre Dernière intervention 3 mars 2004
30 avril 2003 à 17:13
pour l'ascx final :
Dim monObjet As Objet
Dim Lapage As monNamespace.page

Sachant que lors de mes tests cela a fonctionné aléatoirement.
Parfois cela fonctionne bien, d'autres cela affiche 00:00:00
Peut-être dû au localhost ?

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.