何时在视图中使用ViewBag,ViewData或TempData。 在控制器中我想将对象发送到视图。我想知道在这种情况下哪个是最好的。 我希望视图页面中的对象。
答案 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或您不想缓存的对象,但仅适用于下一个请求。