在 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");
}
我的信念是,读取一个值后,它在 TempData 中将不再可用。但我开始单步执行代码,虽然键/值将在分配时添加到 TempData,但它会never当我从 TempData 中提取值时消失(即使我到达不同的控制器)。
我能够让它消失的唯一方法是手动执行一个读取的操作TempData
.
任何人都可以提供任何指示来帮助我更好地了解发生了什么TempData
ASP.NET MVC 2 中的持久性?
我要把这个扔出去......
RedirectToAction 的返回类型为 RedirectToRouteResult。这是由上面伪代码中的几个操作方法调用的。
根据这个可能已过时的博客条目...
4.RedirectResult和RedirectToRouteResult总是调用
TempData.Keep()
and
从动作中调用 Keep()
方法确保没有任何项目
TempData 中的内容在末尾被删除
当前的请求,即使它们是
读。可以使用第二个重载
保留 TempData 中的特定项目。
所以看起来我的 TempData 值已被自动标记。我通过查看这些值显示在 TempData 中的 _initialKeys 下来验证这一点。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)