2009-04-30 209 views
3

我对变量作用域有点奇怪的问题。我已经通过以下方式声明了变量:ASP.Net变量的作用域

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

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

而且这对我的页面工作正常工作。但是,当两个用户使用相同的页面时,我发现我正在交叉。如果一个用户将变量设置为5,另一个用户访问该变量,那么它将被设置为5.我如何设置变量,使其只能由最初设置变量的用户访问?

回答

6

如果您声明MyGlobalVariable为静态,那么对于该类的所有实例,只有一个实例存在,如您所说,多个用户在同一页的多个实例中将访问相同的值。

要么申报INT没有static修改,或者如果你需要它坚持用户,可以考虑使用Viewstate(对于页面范围)或Session(会话范围)

例如

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

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

千万不要使用静态变量在你的页面。

静态变量在内部使用相同的内存地址。所以所有的用户都会得到相同的值。

那么,如果你使用这需要'公共'varibles。那么你将需要使用一些技巧,如视图状态或会话。

+4

“永远不要使用静态变量” ......除非那是预期的行为... – 2009-04-30 10:06:43

+0

noob问题:如何使用公共变量? – 2009-06-22 16:06:11