3

I'm having a bit of a weird problem to do with scope of variables. I've declared a variable in the following way:

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

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

And this works fine on the workings of my page. However when two users are using the same page I'm finding that I'm getting cross over. If one user were to set the variable to 5 and the other use then accessed that variable it would be set to 5. How can I set the variable so it's only accessible to the user who originally set it?

3 Answers 3

6

If you declare MyGlobalVariable as static, then only one instance of it will exist for all instances of the class, so as you said, multiple users, on multiple instances of teh same page will be accessing the same value.

either declare the int without the static modifier or if you need it to persist for that user, consider using Viewstate (for page scope) or Session (for session scope)

e.g.

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

or

protected int MyGlobalVariable
{
    get
    {
        return Session["MyGlobalVariable"] != null ? Convert.ToInt32(Session["MyGlobalVariable"] : 0;
    }
    set
    {
        Session["MyGlobalVariable"] = value;
    }
}
Sign up to request clarification or add additional context in comments.

1 Comment

Thanks Batman, that was just the elegant solution I was looking for
2

Remove the static declaration:

protected int MyGlobalVariable;

More on Static variables

Comments

0

Do not ever use STATIC variables in your pages.

Static variables use same memory address internally. So all users will get same value stored.

Well, if you use this in need of 'public' varilables. Then you will need to use some tricks like viewstate or session.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.