gpt4 book ai didi

c# - TempData 未被清除

转载 作者:太空狗 更新时间:2023-10-29 17:33:26 26 4
gpt4 key购买 nike

我正在开发一个 ASP.NET MVC 3 Web 应用程序,在用户未登录的情况下,我使用 TempData 存储模型对象。

流程如下:

  1. 使用提交表单。
  2. 代码(特殊操作过滤器)将模型添加到 TempData ,重定向到登录页面。
  3. 用户重定向回 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
}

我找到了 this article其中指出:

  1. 只有在请求结束时,项目才会从 TempData 中删除,前提是它们已被标记为要删除。
  2. 项目仅在阅读时被标记为删除。
  3. 可以通过调用 TempData.Keep(key) 取消标记项目。
  4. RedirectResult 和 RedirectToRouteResult 总是调用 TempData.Keep()。

好吧,用 TempData["xxx"] 读取它不是“读取”,因此它们应该被标记为删除吗?

最后一个让我有点担心 - 因为我在 POST (P-R-G) 之后进行重定向。但这无法避免。

有什么方法可以让我说“放弃这个项目”。临时数据。删除?还是我做错了?

最佳答案

通过在我阅读后立即添加 TempData.Remove 来修复。

对此不是很满意。我认为 TempData 的全部意义在于我没有必须这样做。

也可以直接使用Session。

关于c# - TempData 未被清除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7630678/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com