May*_*ayo 3 tempdata asp.net-mvc-2
在ASP.NET MVC 2中,TempData值会持续到会话结束或读取为止.用微软的话说 ......
TempData的值一直存在,直到读取或会话超时为止.以这种方式保持TempData可以启用重定向等方案,因为TempData中的值可以在单个请求之外使用.
我以为我理解了这一点,但我在我的应用程序中遇到了异常行为,其中有一个TempData值可用且它不应该可用.通常,我有一个控制器,其中包含一系列操作,其中第一个操作设置一个TempData值,接下来的几个操作读取然后设置该TempData值,最后一个操作读取TempData值.下面的伪代码......
[HttpPost]
public ActionResult Step1()
{
TempData["bar"] = foo;
return RedirectToAction("Step2");
}
public ActionResult Step2()
{
var foo = TempData["bar"];
TempData["bar"] = foo;
return View();
}
[HttpPost]
public ActionResult Step2()
{
var foo = TempData["bar"];
TempData["bar"] = foo;
return RedirectToAction("Step3");
}
public ActionResult Step3()
{
var foo = TempData["bar"];
TempData["bar"] = foo;
return View();
}
[HttpPost]
public ActionResult Step3()
{
var foo = TempData["bar"];
return RedirectToAction("AnotherAction", "AnotherController");
}
Run Code Online (Sandbox Code Playgroud)
我的信念是,在读取一个值之后,它将不再适用于TempData.但是我开始逐步完成代码,而键/值将在赋值时添加到TempData,当我从TempData中提取值时(即使我到达不同的控制器),它也永远不会消失.
我能够让它消失的唯一方法是手动点击从中读取的动作TempData.
任何人都可以提供任何指针,以帮助我更好地了解TempDataASP.NET MVC 2中的持久性发生了什么?
May*_*ayo 10
我要把它扔出去......
RedirectToAction的返回类型为RedirectToRouteResult.这由上面的伪代码中的几个动作方法调用.
根据这个可能过时的博客文章 ......
4.RedirectResult和RedirectToRouteResult总是调用TempData.Keep()
和
从操作方法中调用Keep()可确保在当前请求结束时不删除TempData中的所有项,即使它们已被读取.第二个重载可用于保留TempData中的特定项.
所以看起来我的TempData值会被自动标记.我通过看到这些值显示在TempData中的_initialKeys下来验证了这一点.
| 归档时间: |
|
| 查看次数: |
1933 次 |
| 最近记录: |