【发布时间】:2012-09-08 19:58:33
【问题描述】:
何时在视图中使用 ViewBag、ViewData 或 TempData。 在控制器中,我想将对象发送到视图。我想知道在这种情况下哪个是最好的。 我想要视图页面中的对象。
【问题讨论】:
标签: asp.net-mvc-3
何时在视图中使用 ViewBag、ViewData 或 TempData。 在控制器中,我想将对象发送到视图。我想知道在这种情况下哪个是最好的。 我想要视图页面中的对象。
【问题讨论】:
标签: asp.net-mvc-3
仅当您需要数据可用于下一个请求时才使用 TempData。
TempData["myInfo"] = "my info";
然后在下一个请求中,它会在那里......但在那之后就会消失。
使用 ViewBag 处理大部分额外数据需要传递到您的视图,而不是 @model
ViewBag.MyInfo = "my info";
然后从您的视图中访问它。
使用 ViewData 访问/输入与 ViewBag 完全相同的信息,除了作为集合而不是动态对象的属性。
ViewData["MyInfo"]
访问与 ViewBag.MyInfo 完全相同的数据
请注意,我使用了字符串,但这些可以存储您想要的任何对象。
另外需要注意的是:TempData 和 ViewData 都是存储对象值的字典,因此在使用它们时必须将它们转换为它们的原始类型。然而,ViewBag 使用动态的,并且您并不总是需要强制转换它,因为它是在运行时完成的。一些方法(如扩展方法)虽然不能处理动态,所以你需要在这些情况下进行强制转换。
【讨论】:
TempData 吗?
恕我直言,体面的设计实践 -
ViewBag = 从不。 ViewData = 从不。 这些是基于魔术字符串的字段,也无法在任何编译时实例中被捕获。
您的 ViewWModel 应该包含它需要的一切。 这就是人生的目的。不要回避它的目的。 TempData 仅用于状态消息或您不想缓存但仅可用于下一个请求的对象。
【讨论】: