2009-08-11 7 views
47

ist es möglich, Liste in Session-Variable in Asp.net C# zu speichern?Store Liste zu Sitzung

+6

Bitte sehen Tags. Er hat eindeutig erwähnt C# asp.net –

Antwort

53

Ja, können Sie jedes Objekt speichern (Ich gehe davon aus Sie verwenden ASP.NET mit den Standardeinstellungen, die im Prozess ist Sitzungszustand):

Session["test"] = myList; 

Sie es wieder auf den ursprünglichen Typ umwandeln sollte Verwendung:

var list = (List<int>)Session["test"]; 
// list.Add(something); 

Wie Richard weist darauf hin, Sie besonders vorsichtig sein sollten, wenn Sie anderen Sitzungsstatus Modi verwenden (zB SQL Server), die Objekte erfordern sein serializable.

+5

Nicht genau richtig. Wenn Sie einen anderen Sitzungsspeicher als den Standardwert in proc verwenden müssen, muss die Klasse serialisierbar sein. Daher ist es am besten, alle Klassen, die Sie in der Sitzung einfügen, als Serializable von Anfang an zu markieren - dann können Sie den Mechanismus ändern, ohne Ihren Code bearbeiten zu müssen. – RichardOD

+0

Gültiger Punkt außer 1. 'Liste ' ist serialisierbar, wenn 'T' serialisierbar ist. 2. Der Standardmodus für den Sitzungsstatus ist in Proc. –

+0

@ Mehrdad- Ich verstehe, was Sie meinten und es ist gut, Sie haben ein Codebeispiel. Ich würde einfach das "beliebige Objekt" in Ihrer Antwort umschreiben. – RichardOD

16

Ja. Für welche Plattform schreibst du? ASP.NET C#?

List<string> myList = new List<string>(); 
Session["var"] = myList; 

Dann abzurufen:

myList = (List<string>)Session["var"]; 
4

ich in einer Klassendatei nicht in den Anwendungsbereich der Seite gefunden, die obige Art und Weise funktioniert hat (was ich habe immer verwendet wird) nicht.
fand ich eine Abhilfe in diesem „Kontext“ wie folgt:

HttpContext.Current.Session.Add("currentUser", appUser); 

und

(AppUser) HttpContext.Current.Session["currentUser"] 

Ansonsten ist der Compiler erwarten eine Zeichenfolge, wenn ich das Objekt in der Sitzung Objekt gerichtet.

+0

Ich erhalte einen solchen Fehler: System.Web.HttpException: Der Sitzungsstatus konnte nicht serialisiert werden. Im Modus 'StateServer' und 'SQLServer' serialisiert ASP.NET die Sitzungsstatusobjekte, und daher sind nicht serialisierbare Objekte oder MarshalByRef-Objekte nicht zulässig. Die gleiche Einschränkung gilt, wenn der benutzerdefinierte Sitzungsspeicher im benutzerdefinierten Modus eine ähnliche Serialisierung durchführt –

1

die Sie interessieren ..

List<Cat> cats = new List<Cat> 
    { 
     new Cat(){ Name = "Sylvester", Age=8 }, 
     new Cat(){ Name = "Whiskers", Age=2 }, 
     new Cat(){ Name = "Sasha", Age=14 } 
    }; 
    Session["data"] = cats; 
    foreach (Cat c in cats) 
     System.Diagnostics.Debug.WriteLine("Cats>>" + c.Name);  //DEBUGGG 
0
YourListType ListName = (List<YourListType>)Session["SessionName"];