Я пытаюсь найти структуру MVC, чтобы нести меня.
В настоящее время единственное, что я использую для хранения сеанса, - это сохранение текущего зарегистрированного пользователя. Мой сайт прост. В этом примере рассмотрим три объекта домена: 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?