簡體   English   中英

如何在將RedirectToAction調用到另一個控制器時維護TempData

[英]How to maintain TempData when calling a RedirectToAction to another controller

在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");

如何在另一個控制器上調用Controller動作,同時保持此TempData

在評論中,Session是特定問題的答案,但可能有理由要避免它。 我已經使用了Brock Allen的解決方案,在這種情況下,你想要TempData的便利但不想使用服務器會話。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM