我有一个类似于下面的控制器动作,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");
}
}
答案 0 :(得分:3)
以下是使用临时数据时需要注意的一些要点。
对临时数据的读取权限不会立即从字典中删除项目,只会标记为删除。
TempData不会始终删除已读取的项目。它仅在操作导致HTTP 200(OK)状态代码时删除项目(即:ViewResult / JsonResult / ContentResult等)
如果导致HTTP 302的操作(例如任何重定向操作),即使访问了数据,数据也会保留在存储中,这就是我的问题。 TempData显然是为将数据传递给不同的控制器/操作而设计的,因此在重定向期间不清除是合理的