【问题标题】:Passing TempData between controllers在控制器之间传递 TempData
【发布时间】:2015-01-21 17:44:15
【问题描述】:

我的问题很简单,TempData 如何在不同的控制器之间传递?自然,由于控制器上下文不同,一个控制器不应该能够访问另一个控制器中的临时数据,而临时数据可以在单个控制器的上下文中在Action Results 之间简单地传递。

但是假设这种情况需要跨控制器通信 OVER TempData,并且 TempData 将是一个要求(无论是好的做法还是坏的做法),这可能吗?

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-5


    【解决方案1】:

    是的,这是可能的,因为 TempData 由 SessionState 支持。 它本质上是生命周期较短的会话状态的一种特殊情况。

    这是一个类似的问题/答案Passing data between different controller action methods

    【讨论】:

    • 感谢您对 TGH 的精彩直截了当的回答。将通过提供一个示例来添加更多关于如何完成的细节。
    • 添加了一个可能有帮助的链接
    • 它不是跨Controller,它解释了Controller内部Action之间的传递。假设控制器 X 有一个动作重定向到控制器 Y 中的动作。现在,如果您使用临时数据,控制器将不会获取它
    • 我有一段时间没看这个了,但我对这里的答案的理解是它解决了原始问题中的两个不同的控制器。据我所知,tempdata 在重定向的情况下应该可以工作。失败了,你总是可以使用常规会话来完成这项工作。
    【解决方案2】:

    TempData 是从 TempDataDictionary 类派生的字典,存储在短期会话中,它是字符串键和对象值。不同的是对象的生命周期。 TempData 保留 HTTP 请求时间的信息。这意味着仅从一页到另一页。这也适用于 302/303 重定向,因为它在同一个 HTTP 请求中。当您从一个控制器移动到另一个控制器或从一个操作移动到另一个操作时,有助于维护数据。换句话说,当您重定向时,“临时数据”有助于在这些重定向之间维护数据

    更多信息What is ViewData, ViewBag and TempData?

    【讨论】:

      【解决方案3】:

      我也在寻找这个。就我而言,我做了一个 ajax 请求,它将一些数据插入到临时数据中。之后我会用 javascript 重定向到不同的控制器/动作。退出一些搜索后,我发现在我的情况下我必须打电话

      TempData.Keep();
      

      这将保留下一个请求的临时数据,尽管您不使用 RedirectToAction

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-02-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-09-10
        相关资源
        最近更新 更多