ASP.Net变量的范围

Jac*_*lls 3 asp.net variables scope

我对变量范围有一些奇怪的问题.我用以下方式声明了一个变量:

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

    protected void MyFunction()
    {
        MyGlobalVariable = 1;
    }
}
Run Code Online (Sandbox Code Playgroud)

这适用于我的页面的工作.然而,当两个用户使用同一页面时,我发现我正在越过.如果一个用户将变量设置为5而另一个用户随后访问该变量,则将其设置为5.如何设置变量以使其仅可由最初设置的用户访问?

Eoi*_*ell 6

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

或者声明没有static修饰符的int,或者如果你需要它为该用户持久化,请考虑使用Viewstate(对于页面范围)或Session(对于会话范围)

例如

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

要么

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