何时在Mvc3中使用ViewBag,ViewData或TempData

时间:2011-11-08 06:17:02

标签: asp.net-mvc-3

何时在视图中使用ViewBag,ViewData或TempData。 在控制器中我想将对象发送到视图。我想知道在这种情况下哪个是最好的。 我希望视图页面中的对象。

2 个答案:

答案 0 :(得分:33)

当您需要数据仅用于下一个请求时,请使用TempData。

TempData["myInfo"] = "my info";

然后在下一个请求中,它会在那里......但是之后会消失。

使用ViewBag将大部分额外数据需求传递到您的视图,超出@model

ViewBag.MyInfo = "my info";

然后从您的视图中访问它。

使用ViewData访问/输入与ViewBag完全相同的信息,但作为集合而不是动态对象的属性除外。

ViewData["MyInfo"]

访问与ViewBag.MyInfo

完全相同的数据

请注意,我使用了字符串,但这些字符串可以存储您想要的任何对象。

另外需要注意的是:TempData和ViewData都是存储对象值的字典,因此在使用它们时必须将它们转换为原始类型。然而,ViewBag使用动态,并且您并不总是需要转换它,因为它是在运行时完成的。有些方法(如扩展方法)无法处理动态,因此您需要在这些情况下进行转换。

答案 1 :(得分:23)

恕我直言,为体面的设计实践 -

ViewBag = never。 ViewData =从不。 这些是基于字符串的神奇字段,并且可以在任何编译时实例中捕获。

您的VieWModel应包含所需的所有。 这就是生活中的目的。不要没有它的目的。仅限状态消息的TempData或您不想缓存的对象,但仅适用于下一个请求。