我正在开发一个ASP.NET MVC 3 web应用程序,在这个场景中,我使用TempData存储模型对象,在这个场景中,用户没有登录。
以下是流程:
在第三步之后,我会认为TempData会被清除吗?
下面是代码:
[HttpGet]
public ActionResult Foo()
{
var prefilled = TempData["xxxx"] as MyModel;
if (prefilled != null)
{
return Foo(prefilled);
}
}
[HttpPost]
[StatefulAuthorize] // handles the tempdata storage and redirect to logon page
public ActionResult Foo(MyModel model)
{
// saves to db.. etc
}我找到了这篇文章,上面写着:
那么,通过使用TempData["xxx"]阅读它,这不是一个“读”,因此,他们应该被标记为删除?
最后一个问题有点让我担心--因为我在投递后做一个重定向( POST )。但这是无法避免的。
有什么办法可以说“扔掉这个东西”吗?TempData.Remove?还是我做错了?
发布于 2011-10-03 03:05:17
修正了在我读完TempData.Remove后添加它。
对此不太高兴。我认为TempData的全部要点是,我不需要这样做。
也可以直接使用会话。
发布于 2011-10-03 06:02:44
这里涉及两个GET HTTP请求:
在您的场景中不涉及POST请求。从GET操作调用POST操作并不意味着要执行单独的请求(您仍然处于初始GET请求的上下文中)。它只是一个C#方法调用,而不是一个单独的请求。
在第一个请求期间,您可以将一些东西存储到TempData中,第二个请求可以使用这个TempData。因此,它将在呈现登录页面的控制器操作中可用。
因此,如果希望删除TempData,则必须在实际操作中从TempData中读取呈现登录页。
发布于 2015-05-16 01:22:59
下面是使用临时数据时要注意的一些要点。
1)对临时数据的读取访问不会立即从字典中删除项,而只是删除标记。
2)临时数据并不总是删除已访问的项。它只在动作导致Http 200状态代码(ViewResult/JsonResult/ContentResult等)时移除该项。
3)在导致Http 302的操作(例如任何重定向操作)的情况下,即使在访问数据时,数据仍保留在存储中。
https://stackoverflow.com/questions/7630678
复制相似问题