1

Buenas! en una pregunta anterior quería saber como mantener una variable para todo el sitio y poderla usar cuando la necesitara: Pregunta anterior

Pero ahora estoy obteniendo este error muy seguido... Error captura

Probé con esto y no funciona, entre otras muchas pruebas que hice como agregar:

//prueba 1
      if (per_App0 == 0 || per_App0 == null)
        {
            FormsAuthentication.RedirectToLoginPage();
        }
// prueba 2
    per_App0 = new (int)Session["per_App0"];
//prueba 3
    new per_App0 =  (int)Session["per_App0"];

Este error no aparece inmediatamente se carga la página, si inicio sesión y voy a la página funciona normal, pero al cabo de un tiempo X cuando refresco la página aparece el error, así que supongo que es como si se estuviera finalizando la sesión, pero si le doy atrás y vuelvo a ir a otra página me doy cuenta que la sesión sigue activa pues no pide contraseña ni devuelve al login.

Vulpex
  • 556
  • 5
  • 10
  • 26
  • ¿Hay algun lugar donde pongas valor a Sesion["per_App0"]? porque si no le pones este valor en ningun lugar antes de consultarlo te va a fallar siempre. – U. Busto Nov 02 '17 at 13:41
  • Esto te puede ayudar a entender este tipo de problemas: https://es.stackoverflow.com/questions/75999/qu%c3%a9-es-una-nullreferenceexception-y-c%c3%b3mo-solucionarla – Gua-naiko-che Nov 02 '17 at 14:00
  • Si Veelicus desde la MasterPage, declaro la variable `int per_App0 = (int)Session["per_App0"];`. Voy a revisar Gua-naiko-che, gracias. – Vulpex Nov 02 '17 at 14:23

1 Answers1

1

Intenta convertiendo el objeto en Nullable<int>, en vez de int solamente:

  int? per_App0 = (int?)Session["per_App0"];

Session["per_App0"] retorna null si no tiene objeto asignado en ese indice y como el tipo de dato int no acepta null, te lanza el NullReferenceException. Conviertiendola a nullable, le indicamos que puede aceptar null, encaso de que no haya ningun numero.

Tambien es bueno notar que un int nunca sera igual a null a menos que sea declarado como nulllable:

// per_App0 nunca sera null, asi que es innecesario hacer la comparacion
if (per_App0 == 0 || per_App0 == null)
{
    FormsAuthentication.RedirectToLoginPage();
}

Ahora bien, si per_App0 fuera Nullable<int> si es valido entonces comprobar por es igual a null:

int? per_App0 = (int?)Session["per_App0"];
if (per_App0 == null || per_App0 == 0)
{
    FormsAuthentication.RedirectToLoginPage();
}

Nota: Nullable<int> y int? es lo mismo.

Einer
  • 20,190
  • 2
  • 14
  • 36
  • pues muy buena tu explicación y al agregar int? funcionó correctamente, aunque se me desapareció la variable, ahora debo buscar como recuperarla de nuevo, pero el error se fue, ya es cosa de mirar detallitos. Muchas Gracias! – Vulpex Nov 02 '17 at 14:29