TempData 在 ASP.NET MVC 2 中读取后保留

2023-12-04

在 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.

任何人都可以提供任何指示来帮助我更好地了解发生了什么TempDataASP.NET MVC 2 中的持久性?


我要把这个扔出去......

RedirectToAction 的返回类型为 RedirectToRouteResult。这是由上面伪代码中的几个操作方法调用的。

根据这个可能已过时的博客条目...

4.RedirectResult和RedirectToRouteResult总是调用 TempData.Keep()

and

从动作中调用 Keep() 方法确保没有任何项目 TempData 中的内容在末尾被删除 当前的请求,即使它们是 读。可以使用第二个重载 保留 TempData 中的特定项目。

所以看起来我的 TempData 值已被自动标记。我通过查看这些值显示在 TempData 中的 _initialKeys 下来验证这一点。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

TempData 在 ASP.NET MVC 2 中读取后保留 的相关文章

随机推荐

  • 在变量周围添加引号

    我需要从 SQL 导出数据并导入 SAS 地址字段的字符串中间有 我尝试使用 CSV 和制表符分隔 但每次 SAS 都会由于 而打破地址字段 我尝试使用另一个问题中的代码将逗号替换为空格 但它不起作用 update temp2 set ST
  • WinForm 应用程序 UI 在长时间运行的操作期间挂起

    我有一个 Windows 窗体应用程序 我需要使用一个 for 循环 其中有大量远程调用 大约 2000 3000 个调用 在执行 for 循环时 我失去了对表单和表单控件的控制 因为它变成了一个大进程 有时它显示 未响应 但如果我等待很长
  • C语言中如何使用void指针?

    以下是我无法理解如何完成的几个函数声明 我扫描了网络以了解 void 指针是什么 并且我知道它必须转换为有用的东西 因为它只指向某个内存块 但我不知道这如何帮助完成这些声明 type of comparison function that
  • Java SAXParser 解析无效的 xml [重复]

    这个问题在这里已经有答案了 我正在尝试解析一些无效的 xml 因为属性没有用引号引起来 有什么方法可以解决这个问题吗 下面是一个简单的例子 以及java代码 XML
  • 将所有标准输入读取到 Java 字节数组中

    现代Java 仅使用标准库 最简单的阅读方式是什么all of标准输入直到 EOF 转换为字节数组 最好不必自己提供该数组 标准输入数据是二进制数据 不是来自文件 IE 像鲁比的东西 foo stdin read 我能想到的唯一的部分解决方
  • 是否可以自动选择正确的客户端证书?

    我已经使用 SSL 客户端证书配置了 Apache httpd 网站 以便只有在 Web 浏览器中安装了正确证书的用户才能访问该网站 如果仅安装了一个客户端证书 Web 浏览器将自动选择它 这不是默认设置 但可以在设置对话框中的某处进行配置
  • Invoke-WebRequest,带参数的 POST

    我正在尝试 POST 到 uri 并发送参数username me Invoke WebRequest Uri http example com foobar Method POST 如何使用 POST 方法传递参数 将参数放入哈希表中并像
  • 使用C#获取SMTP服务器证书

    如何使用 C 连接到支持 STARTTLS 的 SMTP 服务器并获取其 SSL 证书 我知道可以使用 openssl 来完成类似的事情 openssl s client starttls smtp crlf connect 192 168
  • 在 Java 中检查结果集的有效方法

    我正在运行一个 select 命令 该命令返回 1 000 000 行 迭代 ResultSet 下面的代码需要 5 分钟才能执行 有没有更快的方法来迭代 ResultSet conn getDbConnection Statement c
  • 为什么 JavaScript 设置超时不起作用? [关闭]

    Closed 这个问题需要调试细节 目前不接受答案 我正在尝试使用 setTimeout 但它不起作用 任何帮助表示赞赏 有人知道怎么修这个东西吗 var button document getElementById reactionTes
  • 我可以使用

    在文章之后 我有与文章相关的标签列表 将这些标签的列表包装在语义上是否正确
  • 关于View Controller的视图问题

    当我们访问视图控制器的视图属性时 它总是代表整个屏幕还是可以是部分屏幕 间接地说 一个视图控制器可以有多个视图属性吗 donkim 是对的 但不要相信我的话 请参阅 Rincewind 的这篇文章 https devforums apple
  • 有没有办法在运行 64 位的 IE10 中默认设置 Quirks 模式

    我想知道是否有办法让我的 IE10 浏览器在打开时自动设置为 Quirks 模式 我使用的是 Windows 8 64 位 我正在访问一个需要处于怪异模式的网站 当我打开浏览器时 我仍然需要将其更改为怪异模式才能正确访问该网站 当我重新启动
  • 如何在 Android 中截取视频的屏幕截图

    我正在播放一个视频 在某些时候 我需要暂停视频 进行捕获 然后在绘画活动中使用该图像来修改它 问题是 如果我尝试保存视频 图片将是黑色的 尝试过setDrawingCacheEnabled true 可以对视频进行截图吗 你有没有尝试过Th
  • 我怎样才能选择一个html元素,无论它在selenium中的哪个框架中?

    我正在尝试选择一个驻留在 iframe 内并且可能驻留在其他 iframe 中的元素 是否可以在 python selenium 中的某些 子 iframe 中选择一个元素 而无需先选择 iframe 有没有办法以某种方式 循环 每个 if
  • 如何更改Python循环中的for循环迭代器变量?

    我想知道是否可以在 for 循环中更改迭代器的值 例如 我想编写一个程序来通过以下方式计算数字的素因数 def primeFactors number for i in range 2 number 1 if number i 0 prin
  • 处理多个 SIGCHLD

    在运行 Linux 2 6 35 的系统中 我的程序创建许多子进程并监视它们 如果子进程死亡 我会进行一些清理并再次生成该进程 我用signalfd 得到SIGCHLD我的进程中发出信号 signalfd异步使用libevent 当对非实时
  • matheca中的包导入问题

    在mathematica中 我使用的是mma 5 0 猜很老 如果我输入以下一行 Needs Graphics Master Animate Plot Sin n x x 0 2 Pi Axes gt False n 1 6 1 然后我收到
  • Dockerfile 无法构建

    直到几天前Dockerfile工作正常 当我今天尝试再次构建它时 它在终端中给出以下错误 我尝试使用多个 docker 基础映像 但仍然给出相同的错误 谁能帮我这个 我不认为我错过了什么 如果我错过了 它应该早先给我错误 但为什么现在呢 E
  • TempData 在 ASP.NET MVC 2 中读取后保留

    在 ASP NET MVC 2 中 TempData值将一直保留到会话结束或被读取为止 在里面微软的话 TempData 的值一直持续到 它被读取或直到会话时间 出去 以这种方式持久化 TempData 启用重定向等场景 因为 TempDa