RPM*_*984 9 c# asp.net-mvc tempdata asp.net-mvc-3
我正在开发一个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
}
Run Code Online (Sandbox Code Playgroud)
我发现这篇文章指出:
读它TempData["xxx"]不是一个"读",因此它们应被标记为删除?
最后一个关注我 - 因为我在POST(PRG)后进行重定向.但这是无法避免的.
有没有办法说"弃这个项目".TempData.Remove?或者我这样做错了吗?
这里涉及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的操作(例如任何重定向操作)的情况下,即使访问数据,数据也会保留在存储中。
| 归档时间: |
|
| 查看次数: |
12690 次 |
| 最近记录: |