Scope von ASP.Net Variablen
Frage
Ich habe ein bisschen ein sonderbares Problem mit Umfang von Variablen zu tun. Ich habe eine Variable in der folgenden Art und Weise erklärt:
public partial class MyClass: System.Web.UI.Page
{
protected static int MyGlobalVariable;
protected void MyFunction()
{
MyGlobalVariable = 1;
}
}
Und das funktioniert über die Funktionsweise von meiner Seite in Ordnung. Allerdings, wenn zwei Benutzer die gleiche Seite verwenden Ich finde, dass ich bin immer überqueren. Wenn ein Benutzer waren die Variable auf 5 gesetzt und die andere Verwendung zugegriffen dann diese Variable würde es 5 gesetzt werden Wie kann ich die Variable gesetzt, so dass es für den Benutzer nur zugänglich ist, wer sie ursprünglich gesetzt?
Lösung
Wenn Sie MyGlobalVariable
als statisch deklarieren, dann nur eine Instanz wird für alle Instanzen der Klasse existieren, so wie Sie sagten, mehrere Benutzer auf mehrere Instanzen von teh gleichen Seite sein wird, den gleichen Wert zugreifen.
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.
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;
}
}
Andere Tipps
Nicht immer STATIC Variablen in Ihren Seiten verwenden.
Statische Variablen verwendet dieselbe Speicheradresse intern. So alle Benutzer denselben Wert erhalten gespeichert.
Nun, wenn Sie diese brauchen ‚öffentlich‘ verwenden varilables. Dann müssen Sie einige Tricks, wie Ansichtszustand oder Sitzung verwenden.