none
ayuda con variables de session RRS feed

  • Pregunta

  • hola, tengo el siguiente codigo en el controlador

    public ActionResult Login(Models.User user)
            {
                if (ModelState.IsValid)
                {
                    if (user.IsValid(user.UserName, user.Password))
                    {
                        System.Web.Security.FormsAuthentication.SetAuthCookie(user.UserName, user.RememberMe);
                        Session["UserName"] = user.UserName;
                        var algo = (string)Session["UserName"];
                        return RedirectToAction("Index", "Home");
                    }
                    else
                    {
                        ModelState.AddModelError("", "Login Incorrecto");
                    }
                }
                return View(user);
            }

    y en otro controlador me gustaria llamar a la variable de session que le entrego el valor como podria hacerlo, ya que de esta forma no puedo.

    (string)Session["UserName"];
    miércoles, 8 de febrero de 2017 20:09

Respuestas

  • al final utilice una clase 
    public class Navegacion
        {
            private const string _userName = "UserName";
    
            public static string UserName_
            {
                get
                {
                    if (HttpContext.Current.Session[_userName] == null)
                        return string.Empty;
                    else
                        return (string)HttpContext.Current.Session[_userName];
                }
                set
                {
                    HttpContext.Current.Session[_userName] = value;
                }
            }
    }
    y luego las llamo desde cualquier controlador.
    • Marcado como respuesta kumpiita viernes, 3 de marzo de 2017 15:01
    viernes, 3 de marzo de 2017 15:01

Todas las respuestas

  • Para meter el valor desde cualquier controlador, se pone Session["UserName"]=valor;

    y para leerla, valor=(string)Session["UserName"];

    ¿Por qué en un sitio se pone (string) y en el otro no? Porque el Session guarda un valor de tipo object. A la hora de guardar algo en un object le puedes pasar cualquier valor y no requiere conversión explícita porque object es la clase madre de todas las clases. Pero al leerlo y pasar de object a otro tipo, sí que hay que indicar la conversión tal como (string), porque el compilador no puede saber qué clase de objeto habrá dentro del object en tiempo de ejecución.

    viernes, 10 de febrero de 2017 7:54
  • al final utilice una clase 
    public class Navegacion
        {
            private const string _userName = "UserName";
    
            public static string UserName_
            {
                get
                {
                    if (HttpContext.Current.Session[_userName] == null)
                        return string.Empty;
                    else
                        return (string)HttpContext.Current.Session[_userName];
                }
                set
                {
                    HttpContext.Current.Session[_userName] = value;
                }
            }
    }
    y luego las llamo desde cualquier controlador.
    • Marcado como respuesta kumpiita viernes, 3 de marzo de 2017 15:01
    viernes, 3 de marzo de 2017 15:01