TempData未被清除
我正在使用ASP.NET MVC 3 Web应用程序,在那里我使用TempData存储模型对象,在用户未登录的情况下。
流程如下:
第3步之后,我会认为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(PRG)之后做了重定向。 但这是无法避免的。
有没有办法我可以说“沟这个项目”。 TempData.Remove? 或者我做错了什么?
通过在读取它之后添加TempData.Remove
修复。
对此并不满意。 我想整点TempData
是,我没有做到这一点。
也可以直接使用Session。
这里涉及2个GET HTTP请求:
您的方案中没有涉及POST请求。 事实上,从GET Foo操作中调用POST Foo操作并不意味着执行了单独的请求(您仍处于初始GET请求的上下文中)。 它只是一个C#方法调用,而不是一个单独的请求。
您在第一个请求期间将某些内容存储到TempData中,并且此TempData将可用于第二个。 所以它将在呈现登录页面的控制器动作中可用。
因此,如果您想要删除TempData,则必须从TempData读取登录页面的操作。
以下是使用Temp数据时需要注意的一些要点。
1)对临时数据的读取访问不会立即从字典中删除项目,而只是标记为删除。
2)临时数据不会总是删除已被访问的项目。 它只会在动作导致Http 200状态码(ViewResult / JsonResult / ContentResult等)时移除该项目。
3)如果发生导致Http 302的动作(例如任何重定向动作),即使访问数据,数据也会保留在存储器中。
链接地址: http://www.djcxy.com/p/74429.html