2009-04-30 14 views
3

Ich habe ein bisschen ein seltsames Problem mit Umfang der Variablen zu tun. Ich habe eine Variable auf folgende Weise deklariert:Umfang der ASP.Net-Variablen

public partial class MyClass: System.Web.UI.Page 
{ 
    protected static int MyGlobalVariable; 

    protected void MyFunction() 
    { 
     MyGlobalVariable = 1; 
    } 
} 

Und das funktioniert gut auf die Funktionsweise meiner Seite. Wenn jedoch zwei Benutzer dieselbe Seite verwenden, stelle ich fest, dass ich mich überkreuze. Wenn ein Benutzer die Variable auf 5 setzen würde und die andere dann auf diese Variable zugreifen würde, würde sie auf 5 gesetzt. Wie kann ich die Variable so einstellen, dass sie nur für den Benutzer zugänglich ist, der sie ursprünglich gesetzt hat?

Antwort

6

Wenn Sie MyGlobalVariable als statisch deklarieren, dann wird nur eine Instanz für alle Instanzen der Klasse vorhanden sein. Wie bereits erwähnt, greifen mehrere Benutzer auf mehreren Instanzen derselben Seite auf denselben Wert zu.

entweder erklären die int ohne static Modifikator oder wenn Sie es brauchen für diesen Benutzer zu beharren, sollten Sie mit Viewstate (für Seite scope) oder Session (für Sitzungsbereich)

z.B.

protected int MyGlobalVariable 
{ 
    get 
    { 
     return ViewState["MyGlobalVariable"] != null ? Convert.ToInt32(ViewState["MyGlobalVariable"] : 0; 
    } 
    set 
    { 
     ViewState["MyGlobalVariable"] = value; 
    } 
} 

oder

protected int MyGlobalVariable 
{ 
    get 
    { 
     return Session["MyGlobalVariable"] != null ? Convert.ToInt32(Session["MyGlobalVariable"] : 0; 
    } 
    set 
    { 
     Session["MyGlobalVariable"] = value; 
    } 
} 
+0

Danke Batman, das war genau die elegante Lösung, nach der ich gesucht habe –

0

Nicht immer STATIC Variablen in Ihren Seiten verwenden.

Statische Variablen verwenden intern dieselbe Speicheradresse. So erhalten alle Benutzer den gleichen Wert gespeichert.

Nun, wenn Sie dies "öffentliche" Variablen benötigen. Dann müssen Sie einige Tricks wie Viewstate oder Session verwenden.

+4

"Nicht immer STATIC Variablen verwenden" ... es sei denn, das beabsichtigte Verhalten das ist ... –

+0

Noob Frage: Wie öffentliche Variablen benutzen? –