2012-07-25 10 views
7

Ich arbeite in MVC3 Anwendung mit Razor. Nachdem ich den Benutzer validiert habe, erhalte ich in meinem Account-Controller die Benutzer-Client-ID aus der Datenbank. Hier möchte ich ClientID in Sitzungsvariable beibehalten. welches über die gesamte Controller- und Razor-Ansicht hinweg verwendet wurde.Wie persistent Daten mit Sitzungsvariablen in mvc3 Rasierer sehen?

Ich habe keine Ahnung, was ist der beste Weg, dies zu implementieren.OR Wie persistent Daten in der Session-Variablen. Und wie persistente Daten in der Sitzungsvariablen über den Controller hinweg verwendet werden.

Vielen Dank für Ihre Hilfe ..

+0

Diese nützliche http://www.hanselman.com/blog/TroubleshootingExpiredASPNETSessionStateAndYourOptions.aspx könnte – ManirajSS

Antwort

2

Wenn Sie mit ASP.NET Formularauthentifizierung, wird der Benutzername bereits in einem Cookie gespeichert. Sie können über den Controller über

Controller.User.Identity.Name 

darauf zugreifen. Es ist möglich, die Benutzer-ID als Benutzernamen zu speichern. Wenn Sie etwas anrufen wie

FormsAuthentication.RedirectFromLoginPage 

Geben Sie die ID anstelle eines Namens. Die ID kann dann mit der obigen Methode gefunden werden, und es sind keine zusätzlichen Sitzungsdaten erforderlich. Wenn Sie etwas in der Sitzung speichern möchten, rufen Sie einfach

Von Ihrem Controller.

+0

Vielen Dank für Ihre Antwort .. Eigentlich setzen wir Multi Tenant Zugang für unser Rahmen. Also bin ich etwas verwirrt über persistente Daten über den Controller. kannst du mir also vorschlagen, welcher Ansatz besser ist? – user10489

18

Normalerweise schreibe ich eine Session-Wrapper, der mir einen einfachen Zugang, um es in Zukunft erlaubt:

public class SessionData 
{ 
    const string ClientId_KEY = "ClientId"; 

    public static int ClientId 
    { 
     get { return HttpContext.Current.Session[ClientId_KEY] != null ? (int)HttpContext.Current.Session[ClientId_KEY] : 0; } 
     set { HttpContext.Current.Session[ClientId_KEY] = value; } 
    } 
} 

Danach können Sie es von überall wie diese zugreifen kann:

int clientId = SessionData.ClientId; 

Wenn Sie möchten, kann ganze Objekte in dieser Session verwenden.

Oder man kann es wie so gesetzt: SessionData.ClientId = clientId;

+0

Vielen Dank für Ihre Antwort ... Im Grunde implementieren wir Multi-Tenant-Zugriff für unser Framework. Also ist die Session ein guter Ansatz? Und ich bekomme die ClientID basierend auf protokollierten Benutzer von DB. Wie kann ich CliendID in Session Variable binden? – user10489

+0

Ich kann nicht alle Implikationen und Anforderungen Ihres Projekts kennen, aber bis jetzt sehe ich keine Probleme mit Session. Ich habe meine Antwort aktualisiert, um zu zeigen, wie Sie ClientId mithilfe des Wrappers in Sitzung einrichten können. – Dmitry

+0

Was ist der Vorteil beim Schreiben eines Wrappers für den Zugriff auf die Sitzung – Nipuna