调用 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");
如何在另一个控制器上调用控制器操作,同时维护此 TempData
如评论中所述,Session 是特定问题的答案,但您可能出于某些原因想要避免使用它。在您希望使用 TempData 的便利性但又不想使用服务器会话的情况下,我使用了 Brock Allen's solution。
在 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
如评论中所述,Session 是特定问题的答案,但您可能出于某些原因想要避免使用它。在您希望使用 TempData 的便利性但又不想使用服务器会话的情况下,我使用了 Brock Allen's solution。