Я пытаюсь освоить MVC Framework, так что терпите меня.
Прямо сейчас, единственное, для чего я использую хранилище сеансов - это сохранение текущего вошедшего в систему пользователя. Мой сайт прост. В этом примере рассмотрим три объекта домена: Person, Meeting и File. Пользователи могут войти в систему и просмотреть профиль собрания «только для участников», а также добавить в него файлы или просмотреть общедоступный «профиль» собрания, если они не вошли в систему.
Итак, из личного профиля собрания, в котором зарегистрированный пользователь, у меня есть ссылка «добавить файлы». Эта ссылка ведет к FileContoller.Add (int meetingId). Из этого действия я получаю собрание, к которому пользователь хочет добавить файлы, используя идентификатор собрания, но после публикации формы мне все еще нужно знать, к какому собранию пользователь добавляет файлы. В этом и заключается мой вопрос: должен ли я пропустить собрание, которое в данный момент взаимодействует с, через TempData, или добавить его в хранилище сеансов?
Вот так у меня сейчас есть настройка Add action, но она не работает:
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});
}
Редактировать:
Основываясь на большинстве ответов, может ли кто-нибудь привести примеры того, какие данные (кроме сообщений) следует хранить в TempData vs Session?