【问题标题】:How to maintain TempData when calling a RedirectToAction to another controller调用 RedirectToAction 到另一个控制器时如何维护 TempData
【发布时间】:2015-02-17 22:05:46
【问题描述】:

在 MVC 5 项目中,我的控制器中有以下方法;

public ActionResult Login(User user)
{
    TempData["User"] = null;

    if (ModelState.IsValid)
    {
        if (user.IsValid(user.Email, user.Password, Request.UserHostAddress))
        {
            string userData = user.Email;
            HttpCookie authCookie = FormsAuthentication.GetAuthCookie(user.Email, false);
            FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(authCookie.Value);
            FormsAuthenticationTicket newTicket = new FormsAuthenticationTicket(ticket.Version, ticket.Name, ticket.IssueDate, ticket.Expiration, ticket.IsPersistent, userData);
            authCookie.Value = FormsAuthentication.Encrypt(newTicket);
            Response.Cookies.Add(authCookie);

            TempData.Keep("CmsContent");
            return RedirectToAction("Index", "ManageAccount");
        }
        else
        {
            TempData["User"] = user;
            TempData.Keep("CmsContent");
            return RedirectToAction("Index", "Home");
        }
    }
    else
    {
        user.Message = "Invalid email/password";
        TempData["User"] = user; 
        TempData.Keep("CmsContent");
        return RedirectToAction("Index", "Home");
    }
}

而不是必须不断重复下面的代码来维护 TempData,(因为我还需要在我的其他控制器操作中维护 TempData["CmsContent"])像

TempData.Keep("CmsContent");

如何在另一个控制器上调用控制器操作,同时维护这个 TempData

【问题讨论】:

  • 你不能。如果您重定向到另一个操作,那么这是另一个请求,它将用完 TempData 存储,除非您再次为下一个请求保留这些值。如果您需要比TempData 更持久的东西,这就是Session 的用途。
  • 如果 Session 超时,TempData 会发生什么?如果下一个请求,它仍然可用吗?
  • TempData 会话。它只是设置为在下一个请求时过期的 Session 变量。如果会话超时,TempData 中的所有内容都会随之发生。

标签: c# .net asp.net-mvc model-view-controller


【解决方案1】:

在 cmets Session 中是针对特定问题的答案,但您可能出于某些原因想要避免使用它。在您希望使用 TempData 但又不想使用服务器会话的情况下,我使用了Brock Allen's solution

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多