2010-12-07 14 views
22

Erstellen einer MVC 3-App mit Razor und ich habe einige Informationen im Session-Bereich gespeichert, der in der _Layout-Datei verwendet wird.Zugriff auf ein Session-Objekt von Razor _Layout.cshml

Ich habe keine Ahnung, was der beste Weg ist, dies zu implementieren. Einige dieser Informationen werden verwendet, um zu bestimmen, was im Header gerendert wird.

Ich habe ein Current Objekt gespeichert in Sitzungsbereich

Antwort

52

Sie könnten nur die Httpcontext in der Datei Layout zugreifen

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

oder, wenn Sie Zugriff auf das Objekt Benutzer wünschen kann Sie nur ein Objekt erstellen in der Seite und es zuweisen

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

später dann im Code ...

@user.Name 
+0

Hey danke .. das funktioniert, aber jetzt habe ich schmutzige Sache fühle ich hatte Fügen Sie eine @ using-Anweisung hinzu. Gibt es keine Möglichkeit, ein ViewModel in Ihrem _Layout zu verwenden? – JBeckton

+4

Wenn Sie sich sauberer fühlen, können Sie Ihren Namespace zur Standardliste der Razor-Funktionen in der Datei Views \ Web.config hinzufügen. – marcind

+1

Sie können dies auch in eine gemeinsame Basisklasse für Ihre Ansichtsmodelle einschließen. Ich glaube, dass Sie diese Basisklasse möglicherweise von Ihrer _Layout-Seite aus verwenden können. –

3

Ein einfacher Weg, es wird mit Session Eigenschaft aus der Sicht direkt zu tun (HttpContext.Current. Präfix sollte überhaupt nicht nötig sein):

@(CurrentUser)Session["CurrentUser"]