2016-04-08 13 views
2

Ich habe den folgenden Code, der ein Bandprofil erstellt:Halten Profil-ID zugänglich durch die Anwendung

var bandProfile = _profileService.CreateBandProfile(model.BandProfile, file, UserId); 

    if (bandProfile != null) 
    { 
     userManager.AddToRole(UserId, "Band"); 
     //Store the bandprofile ID anywhere? 
     return RedirectToAction("Index", "Welcome"); 
    } 

Nein, ich speichern möchten und die bandprofile ID zugänglich über den Antrag. Halten Sie den Zugriff verfügbar, während der Benutzer mit dem Profil angemeldet ist.

Wie kann ich das erreichen?

Zum Beispiel die userId zu erhalten, können Sie wie folgt durch die Anwendung tun:

UserId = System.Web.HttpContext.Current.User.Identity.GetUserId(); 

ich das gleiche tun wollen, aber mit bandprofileId.

Antwort

0

Es gibt einige Diskussionen über die "Korrektheit", dies zu tun (unten verlinkt), aber Sie können die Variable in speichern.

if (bandProfile != null) 
{ 
    userManager.AddToRole(UserId, "Band"); 
    //Store the bandprofile ID anywhere? 
    HttpContext.Current.Application["BandProfile"] = bandProfile; 

    return RedirectToAction("Index", "Welcome"); 
} 

Alternativ können Sie eine static Variable in einer Klasse irgendwo verwenden.

public static class BandProfile 
{ 
    public static whatever Profile; 
} 

if (bandProfile != null) 
{ 
    userManager.AddToRole(UserId, "Band"); 
    //Store the bandprofile ID anywhere? 
    BandProfile.Profile = bandProfile; 

    return RedirectToAction("Index", "Welcome"); 
} 

Hier ist ein related question, die mit dem gleichen Problem befasst und here ist eine andere.

EDIT:

Um dann diese Variablen zugreifen, können Sie

var bandProfile = HttpContext.Current.Application["BandProfile"];

oder

var bandProfile = BandProfile.Profile;

Nach Microsoft verwenden:

ASP.NET enthält den Anwendungsstatus hauptsächlich aus Gründen der Kompatibilität mit klassischem ASP, so dass vorhandene Anwendungen einfacher nach ASP.NET migriert werden können. Es wird empfohlen, dass Sie Daten in statischen Membern der Anwendungsklasse statt im Application-Objekt speichern.

Das heißt, Sie sollten die static Variable-Methode verwenden. Statische Variablen sind durch Aufruf von ClassName.Variable verfügbar und existieren für die Dauer der laufenden App. Wenn die App geschlossen ist oder die Variable anderweitig geändert wird, gehen diese Informationen verloren.

Um die Informationen zu speichern, muss der Inhalt dieser Variablen in eine externe Quelle (DB, Datei, etc.) geschrieben und beim Start der App eingelesen werden.

+0

Wenn ich der Klasse-Variable den Wert zuweisen, Ist der Wert dann "für immer" in dieser Variablen gespeichert? – Bryan

+0

Wie wäre es mit Sitzungen? – Bryan

+0

@Bryan Ich versuche, eine konkretere Antwort für Sie zu finden, aber ich verstehe, dass die Variable für die Dauer der Sitzung des Benutzers festgelegt ist. Es wird keine globale Variable werden, die immer "für immer" da ist. – levelonehuman

Verwandte Themen