什么时候在ASP.NET MVC中使用ViewBag / ViewData是“可接受的”?

我意识到最好的做法是使用强类型视图并在ViewModel中传递所有需要的数据,但我很好奇是否有实际上被认为是在ViewBag / ViewData中传递数据的“最佳实践”。

ViewBag / ViewData在什么情况下首选将数据传递给视图?

更新

很高兴听到每个人都为ViewBag / ViewData提出的各种用途。 我们可能永远不会达到“最佳实践”,但很高兴看到人们提出的依赖于ViewBag / ViewData的不同解决方案。

对于我传递给视图的模型或视图模型完全无关的信息,我很少使用它们,大多数时候我使用视图模型

我更喜欢使用一些DTO而不是使用viewbag。 使用DTO可以强大地输入您的viewdata。

希望这可以帮助。

我通常会使用强类型视图来显示任何内容,但通常ViewBag.Member设置为当前登录的成员,以便除了特定视图外,它还可以在主布局中使用。

我有一个名为PopulateMemberContext的属性,它填充了ViewBag.Member ,我将该属性添加到我的基本控制器,以便每个视图始终具有必要的数据。

“正确”或“错误”我不知道 – 但它的作用非常好。

我不能说最佳实践,但我主要在使用编辑器模板时使用它。 例如,如果我想显示一个用于编辑某个字段的下拉列表,我将制作以下编辑器模板

 <%:Html.DropDownList("GetIDHere", new SelectList((IEnumerable)ViewData["xyz"]),"select Author")%> 

然后,您将UIHint属性放在模型的BookID字段上

 public class Book { public int BookID{get;set;} [UIHint("mytemplate")] public int AuthorID{get;set;} } 

在这种情况下,我认为,使用ViewData特别精细和干净。 这是Telerik asp.net mvc项目在他们的演示项目演示中编码的方式