我正在开发一个 ASP.NET MVC 3 Web 应用程序,在用户未登录的情况下,我使用 TempData 来存储模型对象。
这是流程:
- 使用提交表单。
- 代码(特殊操作过滤器)将模型添加到 TempData ,重定向到登录页面。
- 用户重定向回 GET 操作,该操作读取 TempData 并直接调用 POST 操作
在第 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 中删除项目。
- 项目仅在阅读时被标记为删除。
- 通过调用 TempData.Keep(key) 可以取消标记项目。
- RedirectResult 和 RedirectToRouteResult 总是调用 TempData.Keep()。
那么通过阅读它TempData["xxx"]
不是“阅读”,因此应该将它们标记为删除?
最后一个让我有点担心——因为我在 POST (PRG) 之后进行了重定向。但这无法避免。
有没有办法我可以说“放弃这个项目”。临时数据。删除?还是我做错了?