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

时间:2011-04-12 15:43:40

标签: c# asp.net asp.net-mvc asp.net-mvc-3

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

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

更新

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

4 个答案:

答案 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

中编码的方式