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

use*_*544 12 asp.net-mvc-3

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

And*_*ber 33

仅在需要数据才能用于下一个请求时使用TempData.

TempData["myInfo"] = "my info";
Run Code Online (Sandbox Code Playgroud)

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

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

ViewBag.MyInfo = "my info";
Run Code Online (Sandbox Code Playgroud)

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

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

ViewData["MyInfo"]
Run Code Online (Sandbox Code Playgroud)

访问与ViewBag.MyInfo完全相同的数据

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

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

  • 还值得记住的是,TempData使用Session,因此在Web场中不可靠,除非Web场使用粘性会话或进程外会话状态.如果下一个请求被退回到另一台计算机,则您的会话可能无法使用. (8认同)

Ada*_*SFT 23

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

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

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