2010-12-01 17 views
3

J'ai une page maître qui contrôle le style de mon site. Dans le code derrière, il y a quelques instances de classe instanciées ainsi que des variables. Ces classes valident l'accès utilisateur et créent ensuite des objets utilisateurLes formulaires Web Content ASP.net peuvent-ils accéder aux variables déclarées dans la section Code Behind de la page principale?

J'ai quelques formulaires de contenu Web qui exécutent des instructions basées sur les objets utilisateur. Jusqu'à présent, il semble que sur chaque formulaire de contenu Web, je dois créer de nouvelles instances des classes trouvées sur la page principale. Cela double mon travail pour chaque formulaire de contenu Web.

Y at-il de toute façon que je puisse créer des classes et des objets instanciés dans le code de page maître derrière?

Répondre

8

exposer les objets (et même les contrôles) comme publiques propriétés (obtenir uniquement pour les contrôles) sur la page Master. Ensuite, dans chaque page que vous souhaitez aspx l'accès à ces objets, ajoutez la déclaration suivante au sommet:

<%@ MasterType VirtualPath="~/MyMasterPage.master" %> 

Comme @Kristof souligne, simplement accéder à vos propriétés comme Master.PropertyName

Vous pouvez également déterminer si il est logique de stocker les objets dans les utilisateurs Session (ne pas oublier qu'ils doivent être sérialisables si vous utilisez DB pour l'état de la session). Je le fais souvent et en contrôle l'accès via les propriétés d'une classe de base Page dont toutes mes pages héritent. En fait, j'ai une base master, page, et usercontrol donc j'ai accès aux mêmes propriétés (pour moi c'est CurrentUser) partout.

+2

correcte. Après avoir fait cela, vous accédez aux propriétés comme ceci: Master.Property –

+0

Dang ... appris quelque chose de nouveau aujourd'hui aussi: D +1 –

2

Je crois que vous le pouvez si vous rendez les propriétés publiques. Puis votre enfant page que vous pouvez faire quelque chose comme cela d'appel:

SiteMaster master = (SiteMaster)this.Master; 
master.MyProperty = 0; 

SiteMaster est la classe de votre page principale. (SiteMaster est la valeur par défaut pour les modèles d'applications)

Bien que mon esprit peut me tromper, je l'ai pas fait pendant un certain temps ...

+0

Vous n'avez pas besoin de lancer si vous définissez la directive Mastertype comme la réponse de Brad –

+0

Je sais maintenant: P Mais nous avons écrit nos réponses en même temps, et je ne connaissais pas cette méthode. –