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 !
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.