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