我意识到最好的做法是使用强类型视图并在ViewModel中传递所有需要的数据,但我很好奇是否有实际上被视为在ViewBag / ViewData中传递数据的“最佳实践”的情况
ViewBag / ViewData在什么情况下首选将数据传递给视图?
更新
很高兴听到每个人都为ViewBag / ViewData提出的各种用途。我们可能永远不会达到“最佳实践”,但很高兴看到人们提出的依赖于ViewBag / ViewData的不同解决方案。
答案 0 :(得分:9)
我很少使用它们,与我传递给视图的模型或视图模型完全无关的信息,同样,大多数时候我使用视图模型
答案 1 :(得分:2)
我更喜欢使用一些DTO而不是使用viewbag。使用DTO可以强大地输入您的viewdata。
希望这有帮助。
答案 2 :(得分:2)
我通常会使用强类型视图来显示任何内容,但通常会将ViewBag.Member
设置为当前登录的成员,这样除了特定视图外,它还可以在主布局中使用。
我有一个名为PopulateMemberContext
的属性,它填充ViewBag.Member
并将该属性添加到我的基本控制器中,以便每个视图始终具有必要的数据。
“正确”或“错误”我不知道 - 但它的效果非常好。
答案 3 :(得分:1)
我不能说最佳实践,但我主要在使用编辑器模板时使用它。例如,如果我想显示一个用于编辑某个字段的下拉列表,我将制作以下编辑器模板
<%:Html.DropDownList("GetIDHere", new SelectList((IEnumerable<someModel>)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项目在他们的演示项目demo
中编码的方式