为了账号安全,请及时绑定邮箱和手机立即绑定

何时在ASP.Net MVC中使用TempData与Session

何时在ASP.Net MVC中使用TempData与Session

绝地无双 2019-10-08 10:38:55
我试图摆脱MVC框架的束缚,所以请耐心等待。现在,我使用会话存储的唯一一件事就是存储当前登录的用户。我的网站很简单。对于此示例,请考虑三个域对象,人员,会议和文件。用户可以登录并查看会议的“仅成员”个人资料,并可以向其中添加文件,或者如果未登录,则可以查看会议的公开“个人资料”。因此,从会议的专用个人资料中,在具有登录用户的情况下,我具有“添加文件”链接。此链接路由到FileContoller.Add(int meetingId)。通过此操作,我可以使用会议ID获取用户要向其添加文件的会议,但是在表单发布后,我仍然需要知道用户向其添加文件的会议。这就是我的问题所在,我应该通过TempData通过“当前与之交互”会议,还是将其添加到Session存储中?这是我目前具有“添加”操作设置的方式,但无法正常工作:    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中?
查看完整描述

3 回答

  • 3 回答
  • 0 关注
  • 504 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信