tengo este código
[HttpPost] public ActionResult Index(LoginModel loginModel) { if (ModelState.IsValid) { // some lines of code . bla bla bla TempData["loginModel"] = loginModel; return RedirectToAction("index", "premium"); } ... }
y este controlador aquí
public ActionResult Index() { var loginModel = TempData["loginModel"] as LoginModel; ... }
ahora, cuando la página se carga, todo parece funcionar bien. pero cuando actualizo, todo se arruina, dice que loginModel es como nulo. la pregunta es, ¿cómo me gustaría hacer un seguimiento de los usuarios de inicio de sesión actual. tengo la autenticación de formularios habilitada. tnx
el error es el siguiente
Object reference not set to an instance of an object. Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. Exception Details: System.NullReferenceException: Object reference not set to an instance of an object. Source Error: Line 22: Line 23: var loginModel = TempData["loginModel"] as LoginModel; Line 24: string username = loginModel.username; Line 25: string password = loginModel.password; Line 26: premiumModel.username = username;
Confusión
pero cuando actualizo, todo se arruina, dice que loginModel es como nulo
Responder
Esto se debe al hecho de que ha leído la clave TempData
y una vez que se lee, se perderán datos para esa clave en particular.
var Value = TempData["keyName"] //Once read, data will be lost
Pregunta
¿Cómo me gustaría hacer un seguimiento de los usuarios actuales de inicio de sesión?
Responder
Entonces, para persistir en los datos incluso después de que se leen los datos, puede VIVIR como a continuación
var Value = TempData["keyName"]; TempData.Keep(); //Data will not be lost for all Keys TempData.Keep("keyName"); //Data will not be lost for this Key
TempData
funciona en nuevas tabs / Windows, como lo hace la variable Session
.
También podría usar la variable de Session
, el único problema importante es que la variable de Session
es muy pesada en comparación con TempData
. Finalmente, también puede mantener los datos en Controladores / Área.
Espero que esta publicación te ayude mucho.
Solo necesita almacenar la identidad del usuario (nombre de usuario) una vez que el usuario se haya autenticado; la contraseña no es necesaria. Como tal, la autenticación ASP.NET ya admite el almacenamiento de la identidad del usuario en la cookie de autenticación y no es necesario reinventar la rueda. Puede obtener la identidad utilizando la propiedad Controller.User .
EDITAR: asumo que ha configurado su aplicación correctamente para Autenticación de formularios. De todos modos, aquí hay algunos enlaces de instrucciones / tutoriales que lo inician en él:
TempData
solo vive para una solicitud. Por lo tanto, está vacío cuando realiza la segunda solicitud. Si desea hacerlo así, debería usar Session
lugar o puede echar un vistazo a la autenticación de formularios .
También debe considerar el asesoramiento de VinayC y no almacenar ninguna información de contraseña en ningún estado, especialmente no en formato de texto claro.
Te sugiero que crees un nuevo proyecto MVC 3 en Visual Studio a través de Archivo> Nuevo. Configurará la autenticación de formularios para usted, para que pueda ver las mejores prácticas para las páginas de inicio de sesión y registro, firmar la entrada / salida del usuario con la cookie de sesión y mostrar la información del usuario como nombre de usuario.