Estoy tratando de entender el framework MVC así que tengan paciencia conmigo.Cuándo usar TempData vs Session en ASP.Net MVC
En este momento, lo único que estoy usando en el almacén de sesión es almacenar el usuario que está conectado actualmente. Mi sitio web es simple. Para este ejemplo, considere tres objetos de dominio, Persona, Reunión y Archivo. Los usuarios pueden iniciar sesión y ver el perfil de "solo miembros" de una reunión y agregarle archivos, o ver el "perfil" público de una reunión si no han iniciado sesión.
Por lo tanto, desde el perfil privado de la reunión, con un usuario conectado, tengo un enlace "agregar archivos". Este enlace se dirige a FileContoller.Add (int meetingId). A partir de esta acción, obtengo la reunión a la que el usuario desea agregar archivos usando la identificación de reunión, pero después de que se haya publicado el formulario, aún necesito saber a qué reunión está agregando archivos el usuario. Ahí radica mi pregunta, ¿debo aprobar la reunión "actualmente interactuando con" a través de TempData, o agregarla a la tienda de la sesión?
Esta es la forma en este momento tengo la configuración Agregar acción, pero que no está funcionando:
public ActionResult Add(int meetingId)
{
try
{
var meeting = _meetingsRepository.GetById(meetingId);
ViewData.Model = meeting;
TempData[TempDataKeys.CurrentMeeting] = meeting; /* add to tempdata here */
}
catch (Exception)
{
TempData[TempDataKeys.ErrorMessage] = "Unable to add files to this meeting.";
return RedirectToRoute("MeetingsIndex");
}
return View();
}
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Add(FormCollection form)
{
var member = Session[SessionStateKeys.Member] as Member;
var meeting = TempData[TempDataKeys.CurrentMeeting] as Meeting; /* meeting ends up null here */
if (member == null)
{
TempData[TempDataKeys.ErrorMessage] = "You must be logged in to add files to an meeting.";
return RedirectToRoute("LoginPage");
}
if (meeting == null)
{
TempData[TempDataKeys.ErrorMessage] = "An error occurred. No meeting selected.";
return RedirectToRoute("MeetingsIndex");
}
// add files to meeting
TempData[TempDataKeys.Notification] = "Successfully added.";
return RedirectToRoute("AddFiles", new {meetingId = meeting.MeetingId});
}
Editar:
Sobre la base de la mayoría de las respuestas, puede cualquiera dar ejemplos de ¿Qué tipo de datos (que no sean mensajes) deberían almacenarse en TempData vs Session?
¿Qué tipo es TempDataKeys, solo una clase? ¿O una enumeración? – Anon343224user