Tengo un controller único donde controlo todas mis vistas, así que desde aquí tengo un problema. Después de enviar datos para iniciar sesión, necesito obtener un valor enviado. Por ejemplo, tengo este controlador: HomeController , en este controlador tengo cuatro ActionResult :
Índice de resultados de acción
AcciónResultado Iniciar sesión
AcciónResultado Cuotas
AcciónResultado Cerrar sesión
Entonces, cuando el usuario inicia sesión, necesito obtener aquí el nombre de usuario para verificar que ya está conectado desde mi base de datos
Controlador de inicio :
public class HomeController : Controller { public ActionResult Index() { return View(); } public ActionResult Login(string uname, string psw) { try { ViewData["uname"] = uname; ViewData["psw"] = psw; ConexionSQL sql = new ConexionSQL(); var usuario = sql.login(uname, psw); var existencia = sql.usuarioOCobrador(uname, psw); if (existencia[0].usuario == "USUARIO") { var caracteres = Convert.ToString(psw); var pruebaUsuario = sql.datos(uname); if (pruebaUsuario[0].clave == caracteres) { return View("Cuotas", usuario); } else { ViewBag.Contra = "Contraseña incorrecta."; } } else if (existencia[0].usuario == "COBRADOR") { return RedirectToAction("Cuotas", "Home", usuario); } else { ViewBag.Usu = "Usuario incorrecto o usted no tiene los permisos para ingresar al sistema. Comuníquese con el área pertinente o el Departamento de Sistemas."; } } catch (SqlException ex) { throw ex; } return View("Index"); } public ActionResult LogOff(string uname) { ConexionSQL conexionSQL = new ConexionSQL(); conexionSQL.updateConectado(uname, false); FormsAuthentication.SignOut(); Session.Abandon(); return RedirectToAction("Index", "Home"); } public ActionResult Cuotas() { ConexionSQL sql = new ConexionSQL(); string uname = string.Empty; string psw = string.Empty; //Get your ViewData variables here if (ViewData["uname"] != null) { uname = Convert.ToString(ViewData["uname"]); } if (ViewData["psw"] != null) { psw = Convert.ToString(ViewData["psw"]); } var usuario = sql.datosCob(uname); if (usuario[0].conectado == false) { return RedirectToAction("Index", "Home"); } else { return RedirectToAction("Cuotas", "Home"); } } }Vista de índice, aquí está el inicio de sesión:
<form class="modal-content animate" onsubmit="return control()" method="post" action="@Url.Action("Login", "Home")"> <div class="imgcontainer"> <span onclick="document.getElementById('id01').style.display='none'" class="close" title="Cerrar">×</span> <img src="~/Images/00.png" alt="Logo" class="avatar"/> </div> <div class="container"> <label for="uname"><b>Usuario:</b></label> <input type="text" id="uname" placeholder="Ingrese usuario..." name="uname" onkeypress="return soloLetras(event)"/> <label for="psw"><b>Contraseña:</b></label> <input type="password" id="psw" placeholder="Ingrese contraseña..." name="psw" onkeypress="return soloNumeros(event)"/> <button type="submit">Iniciar sesión</button> </div> </form> Pero uname siempre es null , ¿qué pasa con mi código?
Si entiendo correctamente, necesita obtener su uname que primero publica en su método de inicio de Login y luego necesita esta variable en su método Cuotas en la misma solicitud cuando se envía el formulario. Si ese es el caso, debe usar Session para conservar sus variables de una acción de controlador a otra. Su acción de formulario es el método de inicio de Login y no el método Cuotas , por lo que su FormCollection siempre será nulo. Entonces, en tu caso, se vería así:
public ActionResult Login(string uname, string psw) { Response.AppendHeader("Cache-Control", "no-store"); try { //Set your variables here to passed to next action Session["uname"] = uname; Session["psw"] = psw; ConexionSQL sql = new ConexionSQL(); var usuario = sql.login(uname, psw); var existencia = sql.usuarioOCobrador(uname, psw); if (existencia[0].usuario == "USUARIO") { var caracteres = Convert.ToString(psw); var pruebaUsuario = sql.datos(uname); if (pruebaUsuario[0].clave == caracteres) { sql.updateConectado(uname, true); return RedirectToAction("Cuotas", "Home"); } else { ViewBag.Contra = "Contraseña incorrecta."; } } else if (existencia[0].usuario == "COBRADOR") { sql.updateConectado(uname, true); return RedirectToAction("Cuotas", "Home"); } else { ViewBag.Usu = "Usuario incorrecto o usted no tiene los permisos para ingresar al sistema. Comuníquese con el área pertinente o el Departamento de Sistemas."; } } catch (SqlException ex) { throw ex; } return View("Index"); } Y las puedes conseguir en tu método Cuotas así:
public ActionResult Cuotas() { ConexionSQL sql = new ConexionSQL(); string uname = string.Empty; string psw = string.Empty; //Get your ViewData variables here if (Session["uname"] != null) { uname = Convert.ToString(Session["uname"]); } if (Session["psw"] != null) { psw = Convert.ToString(Session["psw"]); } var usuario = sql.datosCob(uname); if (usuario[0].conectado == false) { return RedirectToAction("Index"); } else { return View("Cuotas"); } }