2010-12-07 14 views
22

Construire une application MVC 3 avec Razor et j'ai des informations persistantes dans la portée Session qui sera utilisée dans le fichier _Layout.Accéder à un objet Session depuis Razor _Layout.cshml

Je n'ai aucune idée de la meilleure façon de l'implémenter. Certaines de ces informations sont utilisées pour déterminer ce qui est rendu dans l'en-tête.

J'ai un objet CurrentUser stocké dans la portée de la session

Répondre

52

Vous pouvez simplement accéder au HttpContext dans le fichier de mise en page

@HttpContext.Current.Session["Whatever"].ToString() 

ou, si vous souhaitez accéder à l'objet utilisateur, vous pouvez simplement créer un objet dans la page et lui attribuer

@{ CurrentUser user = (CurrentUser)HttpContext.Current.Session["CurrentUser"]; } 

Puis, plus tard dans votre code ...

@user.Name 
+0

Hey merci .. qui fonctionne, mais maintenant je me sens sale la cause que je devais ajouter une directive @using .. n'existe-t-il pas un moyen d'utiliser un ViewModel dans votre _Layout? – JBeckton

+4

Si cela vous permet de vous sentir plus propre, vous pouvez ajouter votre espace de noms à la liste par défaut des utilisations de Razor dans le fichier Views \ Web.config. – marcind

+1

Vous pouvez également inclure ceci dans une classe de base commune pour vos modèles de vue. Je crois que vous pourriez être en mesure d'utiliser cette classe de base à partir de votre page _Layout. –

3

Un moyen plus facile de le faire est d'utiliser la propriété Session directement à partir de la vue (préfixe HttpContext.Current. ne devrait pas être nécessaire du tout):

@(CurrentUser)Session["CurrentUser"]