Domanda

Ho un po 'di strano problema con l'ambito delle variabili. Ho dichiarato una variabile nel modo seguente:

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

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

E questo funziona benissimo sul funzionamento della mia pagina. Tuttavia, quando due utenti utilizzano la stessa pagina mi accorgo che sto attraversando. Se un utente dovesse impostare la variabile su 5 e l'altra utilizzasse, accedendo a quella variabile verrebbe impostata su 5. Come posso impostare la variabile in modo che sia accessibile solo all'utente che l'ha impostata originariamente?

È stato utile?

Soluzione

Se dichiari MyGlobalVariable come statico, allora ne esisterà solo un'istanza per tutte le istanze della classe, quindi come hai detto, accederanno più utenti, su più istanze della stessa pagina lo stesso valore.

dichiarare int senza il modificatore statico o se è necessario che persista per quell'utente, prendere in considerazione l'utilizzo di Viewstate (per ambito pagina) o Session (per ambito sessione)

per es.

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

o

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

Altri suggerimenti

Rimuovi la dichiarazione statica:

protected int MyGlobalVariable;

Altre informazioni su Variabili statiche

Non usare mai variabili STATIC nelle tue pagine.

Le variabili statiche usano internamente lo stesso indirizzo di memoria. Quindi tutti gli utenti avranno lo stesso valore memorizzato.

Bene, se lo usi per aver bisogno di variabili "pubbliche". Quindi dovrai usare alcuni trucchi come viewstate o session.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top