Cuándo usar TempData vs Session en ASP.Net MVC

Estoy tratando de entender el marco MVC, así que tengan paciencia conmigo.

En este momento, lo único que estoy usando para almacenar la sesión es almacenar el usuario que ha iniciado sesión 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 "solo para miembros" de una reunión y pueden agregarle archivos o ver el "perfil" público de una reunión si no están conectados.

Por lo tanto, desde el perfil privado de la reunión, con un usuario registrado, tengo un enlace "agregar archivos". Este enlace se dirige a FileContoller.Add (int meetingId). A partir de esta acción, obtengo la reunión en la que el usuario desea agregar archivos para usar el ID de la reunión, pero después de que se publique el formulario, aún necesito saber a qué reunión está agregando los archivos. Ahí es donde radica mi pregunta: ¿debo pasar la reunión "actualmente interactuando con" a través de TempData, o agregarla a la tienda de la sesión?

Así es como actualmente tengo la configuración de Agregar acción, pero no funciona:

    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:

Según la mayoría de las respuestas, ¿puede alguien proporcionar ejemplos sobre qué tipo de datos (que no sean mensajes) deben almacenarse en TempData vs Session?

Respuestas a la pregunta(7)

Su respuesta a la pregunta