2009-04-30 10 views
3

Je rencontre un problème un peu étrange avec la portée des variables. J'ai déclaré une variable de la façon suivante:Portée des variables ASP.Net

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

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

Et cela fonctionne très bien sur le fonctionnement de ma page. Cependant, lorsque deux utilisateurs utilisent la même page, je constate que je suis en train de traverser. Si un utilisateur définissait la variable à 5 et l'autre utilisait alors accédé à cette variable, il serait défini sur 5. Comment puis-je définir la variable afin qu'elle soit uniquement accessible à l'utilisateur qui l'a définie à l'origine?

Répondre

6

Si vous déclarez MyGlobalVariable comme étant statique, alors une seule instance existera pour toutes les instances de la classe. Ainsi, comme vous l'avez dit, plusieurs utilisateurs sur plusieurs instances de la même page accéderont à la même valeur.

soit déclarer l'int sans le modificateur static ou si vous avez besoin de persister pour cet utilisateur, envisagez d'utiliser Viewstate (pour la portée de la page) ou Session (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; 
    } 
} 
+0

Merci Batman, c'était juste la solution élégante que je recherchais –

0

Ne jamais utiliser des 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 ce besoin de varilables 'public'. Ensuite, vous devrez utiliser quelques astuces comme viewstate ou session.

+4

"Ne jamais utiliser des variables STATIC" ... à moins thats le comportement prévu ... –

+0

noob question: comment utiliser des variables publiques? –

Questions connexes