Объем переменных ASP.Net - PullRequest
       6

Объем переменных ASP.Net

3 голосов
/ 30 апреля 2009

У меня возникла странная проблема с областью действия переменных. Я объявил переменную следующим образом:

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

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

И это прекрасно работает на моей странице. Однако, когда два пользователя используют одну и ту же страницу, я обнаружил, что перехожу. Если один пользователь установит переменную равной 5, а другой пользователь получит доступ к этой переменной, то она будет установлена ​​равной 5. Как я могу установить переменную, чтобы она была доступна только тому пользователю, который изначально ее установил?

Ответы [ 3 ]

6 голосов
/ 30 апреля 2009

Если вы объявите 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;
    }
}
2 голосов
/ 30 апреля 2009

Удалить статическое объявление:

protected int MyGlobalVariable;

Подробнее о Статические переменные

0 голосов
/ 30 апреля 2009

Никогда не используйте переменные STATIC на ваших страницах.

Статические переменные используют один и тот же адрес памяти внутри. Таким образом, все пользователи получат одинаковые значения.

Хорошо, если вы используете это для 'public' переменных. Тогда вам нужно будет использовать некоторые приемы, такие как viewstate или session.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...