作为this question的后续,我想知道我的TempData到底发生了什么。
设想1:
validated
H 110用户是通过TempData设置显示的<代码>H 213F 214
设想2:
H 124用户单击验证url H 225H 126用户is
>用户是不通过验证操作中的TempData设置显示的<代码>H 229<代码>F 230/代码>现在,我看不出有什么理由让用户登录来验证。在场景1中,我在TempData中添加了一条“成功”消息,并返回RedirectToAction(“索引”)。索引操作有一个AuthorizeAttribute --如果它们没有登录,它们将被重定向到登录屏幕(单独的控制器)。
我希望登录屏幕显示我的消息,但是在这个场景中,TempData似乎被清除了。我是否误解了TempData生命周期?它是否只适用于同一控制器内的请求?
发布于 2010-02-03 17:57:11
问题是,如果用户没有登录,AuthorizeAttribute将引入另一个重定向到循环中。您将用户重定向到另一个操作,如果用户未登录,则AuthorizeAttribute将其重定向到登录页面。TempData只存在一个请求周期,因此额外的重定向(请求)正在清空它,它在登录页面上不可用。
您可以考虑将它直接放在会话中,而不是会话的TempData前端。只要会议还活着,它就应该还在那里。
发布于 2010-02-03 18:04:07
[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);
}https://stackoverflow.com/questions/2194123
复制相似问题