asp.net mvc mantener el objeto vivo, información

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:

  1. http://www.apexa.net/Blog/web_design_Blog_20100319.aspx
  2. http://www.asp.net/mvc/tutorials/authenticating-users-with-forms-authentication-cs
  3. Explica la solución para que no tengas que aplicar el atributo Autorizar en cada acción: http://blogs.msdn.com/b/rickandy/archive/2011/05/02/securing-your-asp-net-mvc-3 -application.aspx

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.