作为this question的后续内容,我想知道我的TempData发生了什么。
情景1:
情景2:
现在,我没有看到用户登录进行验证的原因。在场景1中,我在TempData中输入了“Success”消息,并返回RedirectToAction(“Index”)。索引操作有一个AuthorizeAttribute - 如果他们没有登录,他们会被重定向到登录屏幕(单独的控制器)。
我希望登录屏幕显示我的消息,但TempData似乎在这种情况下被清除。我是否误解了TempData生命周期?它是否仅适用于同一控制器内的请求?
答案 0 :(得分:6)
问题是,如果用户未登录,AuthorizeAttribute会在循环中引入另一个重定向。您正在将用户重定向到另一个操作,然后,如果用户未登录,则AuthorizeAttribute将它们重定向到登录页面。 TempData只存在于一个请求周期内,因此额外的重定向(请求)将其清空,并且在登录页面上不可用。
您可以考虑直接将其放在Session中,而不是将TempData前端放入Session。只要会话存在,它应该仍然存在。
答案 1 :(得分:3)
[Authorize]
引入了额外的重定向,清除TempData
(Tvanfosson解释了详细信息)。因此,要使其正常工作,您可以在重定向到的方法上使用标记,例如
return RedirectToAction("Confirm", new { status = "Success!" });
(假设您声明了以下路线和操作方法:)
routes.MapRoute("Confirmation",
"Account/Confirm/{status}",
new { controller = "Account", action = "Confirm", status = "" });
public ActionResult Confirm(string status)
{
return View(status);
}