Pregunta

Tengo un problema extraño relacionado con el alcance de las variables. He declarado una variable de la siguiente manera:

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

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

Y esto funciona bien en el funcionamiento de mi página. Sin embargo, cuando dos usuarios están usando la misma página, encuentro que me estoy cruzando. Si un usuario estableciera la variable en 5 y el otro uso luego accediera a esa variable, se establecería en 5. ¿Cómo puedo configurar la variable para que solo sea accesible para el usuario que la estableció originalmente?

¿Fue útil?

Solución

Si declara MyGlobalVariable como estático, solo existirá una instancia para todas las instancias de la clase, por lo que, como ha dicho, varios usuarios, en varias instancias de la misma página, accederán el mismo valor.

declare el int sin el modificador static o si necesita que persista para ese usuario, considere usar Viewstate (para el alcance de la página) o Session (para el alcance de la sesión)

por ejemplo

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

o

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

Otros consejos

Eliminar la declaración estática:

protected int MyGlobalVariable;

Más información en Variables estáticas

Nunca uses variables ESTÁTICAS en tus páginas.

Las variables estáticas utilizan internamente la misma dirección de memoria. Así que todos los usuarios obtendrán el mismo valor almacenado.

Bueno, si usas esto para necesitar varilables 'públicos'. Entonces necesitarás usar algunos trucos como viewstate o session.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top