私はMVCフレームワークのコツをつかもうとしているので、我慢してください。
現在、セッションストアを使用しているのは、現在ログインしているユーザーを保存することだけです。私のウェブサイトはシンプルです。この例では、Person、Meeting、および File の 3 つのドメイン オブジェクトを考えます。ユーザーは、ログインしてミーティングの「メンバー専用」プロファイルを表示し、それにファイルを追加したり、ログインしていない場合はミーティングの公開「プロファイル」を表示したりできます。
そのため、ミーティングのプライベート プロファイルから、ログインしているユーザーには、「ファイルを追加」リンクがあります。このリンクは FileContoller.Add(int meetingId) にルーティングされます。このアクションから、ユーザーが会議 ID を使用してファイルを追加したい会議を取得しますが、フォームが投稿された後でも、ユーザーがファイルを追加している会議を知る必要があります。それが私の質問の場所です。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});
}
編集:
ほとんどの回答に基づいて、どのような種類のデータ (メッセージ以外) を TempData と Session に保存する必要があるかについて、誰かが例を提供できますか?