title: When to use TempData vs Session in ASP.Net MVC
body: <p>I am trying to get the hang of MVC framework so bear with me. </p>
  
  <p>Right now, the only thing I'm using the session store for is storing the current logged in user. My website is simple. For this example, consider three domain objects, Person, Meeting, and File. Users can log in and view a "members only" profile of a meeting and can add files to it, or view a meeting's public "profile" if they aren't logged in. </p>
  
  <p>So, from the meeting's private profile, with a logged in user, I have a "add files" link. This link routes to FileContoller.Add(int meetingId). From this action, I get the meeting the user want to add files to using the meeting id, but after the form is posted, I still need to know which meeting the user is adding files to. That's where my question lies, should I pass the "currently interacting with" meeting through TempData, or add it to the Session store?</p>
  
  <p>This is how I currently have the Add action setup, but it's not working:</p>
  
  <pre><code>    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});
  }
  </code></pre>
  
  <p><strong>Edit:</strong> <br/></p>
  
  <p>Based on most of the answers, can any one provide any examples on what kind of data (other than messages) should be stored in TempData vs Session?</p>