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

Soyez le premier à donner votre avis sur cette source.

Snippet vu 10 345 fois - Téléchargée 34 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

Messages postés
4
Date d'inscription
mardi 16 décembre 2003
Statut
Membre
Dernière intervention
16 août 2004

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
Messages postés
12
Date d'inscription
jeudi 27 février 2003
Statut
Membre
Dernière intervention
4 mai 2005

moi aussi
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
27
Je trouve ca tres bien
Messages postés
216
Date d'inscription
dimanche 13 janvier 2002
Statut
Modérateur
Dernière intervention
7 novembre 2009

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
Messages postés
13
Date d'inscription
jeudi 4 avril 2002
Statut
Membre
Dernière intervention
3 mars 2004

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.