【发布时间】:2015-01-21 17:44:15
【问题描述】:
我的问题很简单,TempData 如何在不同的控制器之间传递?自然,由于控制器上下文不同,一个控制器不应该能够访问另一个控制器中的临时数据,而临时数据可以在单个控制器的上下文中在Action Results 之间简单地传递。
但是假设这种情况需要跨控制器通信 OVER TempData,并且 TempData 将是一个要求(无论是好的做法还是坏的做法),这可能吗?
【问题讨论】:
我的问题很简单,TempData 如何在不同的控制器之间传递?自然,由于控制器上下文不同,一个控制器不应该能够访问另一个控制器中的临时数据,而临时数据可以在单个控制器的上下文中在Action Results 之间简单地传递。
但是假设这种情况需要跨控制器通信 OVER TempData,并且 TempData 将是一个要求(无论是好的做法还是坏的做法),这可能吗?
【问题讨论】:
是的,这是可能的,因为 TempData 由 SessionState 支持。 它本质上是生命周期较短的会话状态的一种特殊情况。
这是一个类似的问题/答案Passing data between different controller action methods
【讨论】:
TempData 是从 TempDataDictionary 类派生的字典,存储在短期会话中,它是字符串键和对象值。不同的是对象的生命周期。 TempData 保留 HTTP 请求时间的信息。这意味着仅从一页到另一页。这也适用于 302/303 重定向,因为它在同一个 HTTP 请求中。当您从一个控制器移动到另一个控制器或从一个操作移动到另一个操作时,有助于维护数据。换句话说,当您重定向时,“临时数据”有助于在这些重定向之间维护数据
【讨论】:
我也在寻找这个。就我而言,我做了一个 ajax 请求,它将一些数据插入到临时数据中。之后我会用 javascript 重定向到不同的控制器/动作。退出一些搜索后,我发现在我的情况下我必须打电话
TempData.Keep();
这将保留下一个请求的临时数据,尽管您不使用 RedirectToAction
【讨论】: