【问题标题】:MVC C# TempDataMVC C# 临时数据
【发布时间】:2012-05-07 18:16:50
【问题描述】:

谁能解释一下 TempData 在 MVC 中的用途。 我知道它的行为类似于 ViewBag,但除此之外它还能做什么。

【问题讨论】:

  • 不知道你从哪里得到它“表现得像 ViewBag”的想法,因为它什么都不做。

标签: c# asp.net-mvc tempdata


【解决方案1】:

TempData 是一个非常短暂的实例,您应该 仅在当前和后续请求期间使用它!自从 TempData 以这种方式工作,您需要确定下一步是什么 请求将是,并且重定向到另一个视图是您唯一的时间 可以保证这一点。因此,使用 TempData 的唯一场景 当您重定向时,将可靠地工作。这是因为一个 重定向终止当前请求(并发送 HTTP 状态代码 302 对象移动到客户端),然后在服务器上创建一个新请求 为重定向视图提供服务。回首往事 HomeController 代码示例意味着 TempData 对象可以产生 结果与预期不同,因为下一个请求来源 不能保证。例如,下一个请求可以来自 完全不同的机器和浏览器实例。

http://rachelappel.com/when-to-use-viewbag-viewdata-or-tempdata-in-asp.net-mvc-3-applications

【讨论】:

    【解决方案2】:

    TempData 是一个字典对象,它派生自 TempDataDictionary 类并存储在短期会话中。

    public TempDataDictionary TempData { get; set; }
    

    它是ControllerBase类的一个属性,用于将数据从当前请求传递到后续请求(意味着从一个页面重定向到另一个页面)。 它的生命很短,直到目标视图完全加载为止。 它需要类型转换来获取数据并检查空值以避免错误。它仅用于存储一次性消息,如错误消息、验证消息。

    【讨论】:

    • 缺乏这方面的信息很烦人。 Tempdata 如何在 HTTP 协议中工作?它是像 Play 的 playframework.com/documentation/2.6.x/JavaSessionFlash 这样的短暂 cookie,它是存储在服务器端会话对象中的东西吗?如果是这样,这意味着如果您有多个服务器,您可能无法获得该 TempData,因为它只存在于其中一个上,对吧?
    【解决方案3】:

    ViewBag

    允许您创建动态属性

    在控制器和视图之间传递数据

    控制器

    ViewBag.Name= "Lion";

    查看

    <div>
      <h4>@ViewBag.Name</h4>
     </div>
    

    临时数据

    TempData 是一个非常短暂的实例

    您应该只在当前和后续请求期间使用它

    TempData 字典用于在控制器动作之间共享数据

    TempData["Name"] = "Lion";
    

    【讨论】:

    • 恐怕这个答案实际上根本没有回答这个问题。 -1
    猜你喜欢
    • 1970-01-01
    • 2023-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    • 2017-01-21
    • 2016-05-08
    • 2018-12-16
    相关资源
    最近更新 更多