ASP.NET TempData 即使在阅读后也不会被清除

标签 asp.net asp.net-mvc tempdata

我有一个类似于下面的 Controller 操作,TempData 由我的框架初始化。我注意到 TempData 在读取后不会清除该值,如操作“EmployeeUnderAge”中所示。

TempData 什么时候清除已经读取的数据?

public class HomeController : Controller
{
    public ActionResult Index(int iD)
    {
        var employeeAge = (int)TempData["Age"];
        RouteData.Values.Add("Age", employeeAge);
        return RedirectToAction("EmployeeUnderAge");
    }

    public ActionResult EmployeeUnderAge(int employeeAge)
    {
        var stillInTempData = (employeeAge == ((int) TempData["Age"]));
        return (stillInTempData) ? View("Index") : View("Error");
    }
}

最佳答案

以下是使用临时数据时需要注意的一些关键点。

  • 对临时数据的读取访问不会立即从字典中删除项目,而只会标记删除。
  • TempData 不会总是删除已读取的项目。它仅在操作导致 HTTP 200 (OK) 状态代码(即:ViewResult/JsonResult/ContentResult 等)时删除该项目
  • 如果操作导致 HTTP 302(例如任何重定向操作),即使访问数据,数据也会保留在存储中,这就是我的问题。 TempData 显然是为将数据传递给不同的 Controller / Action 而设计的,因此在重定向期间不清除是合理的
  • 关于ASP.NET TempData 即使在阅读后也不会被清除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32571599/

    相关文章:

    c# - 如何使用 Razor 语法获取指向 ASP.NET MVC 4 文本中的 URL 的链接?

    c# - 我是否需要 web.config 值配置 -> 运行时 -> System.Web.Extensions 的 assemblyBinding?

    c# - 如何在 epplus 工作表中附加 HTML?

    asp.net-mvc - bundle 样式不起作用,但直接链接标签起作用

    c# - 性能调整 Entity Framework 查询

    c# - 更新数据库上下文以包含 View 模型

    c# - 如何将 ViewModel 对象添加到 TempData

    javascript - 有什么方法可以进行同步 PageMethods 调用?

    asp.net-mvc - 表单发布后如何在我的 View 中检查 TempData 值?

    asp.net-mvc - 是否可以从HttpContext访问TempData键/值?