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?

War es hilfreich?

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

Entfernen Sie die statische Deklaration:

protected int MyGlobalVariable;

Mehr Statische Variablen

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top