Question

J'ai un problème étrange lié à la portée des variables. J'ai déclaré une variable de la manière suivante:

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

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

Et cela fonctionne bien sur le fonctionnement de ma page. Cependant, lorsque deux utilisateurs utilisent la même page, je me rends compte que je me fais traverser. Si un utilisateur définissait la variable sur 5 et que l'autre utilisait cette ressource, elle serait définie sur 5. Comment définir la variable de sorte qu'elle ne soit accessible qu'à l'utilisateur qui l'a configurée à l'origine?

Était-ce utile?

La solution

Si vous déclarez MyGlobalVariable comme statique, une seule instance de celle-ci existera pour toutes les instances de la classe. Par conséquent, comme vous l'avez dit, plusieurs utilisateurs, sur plusieurs instances de la même page, accéderont la même valeur.

déclarez l'intel sans le modificateur static ou, si vous souhaitez le conserver pour cet utilisateur, envisagez d'utiliser Viewstate (pour l'étendue de la page) ou Session <. / code> (pour la portée de la session)

par exemple

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

ou

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

Autres conseils

Supprimez la déclaration statique:

protected int MyGlobalVariable;

En savoir plus sur les Variables statiques

N'utilisez jamais de variables STATIC dans vos pages.

Les variables statiques utilisent la même adresse mémoire en interne. Ainsi, tous les utilisateurs auront la même valeur stockée.

Eh bien, si vous utilisez ceci et que vous avez besoin de variables «publiques». Ensuite, vous devrez utiliser des astuces telles que viewstate ou session.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top