我知道最佳实践是使用强类型视图并在ViewModel中传递所有所需数据,但我想知道是否有情况下将数据传递给ViewBag/ViewData被认为是“最佳实践”。
在哪些场景下ViewBag/ViewData更适合用于向视图传递数据?
更新
很高兴听到大家对ViewBag/ViewData提出的各种用途。我们可能永远无法得出“最佳实践”,但看到人们依赖ViewBag/ViewData构建的不同解决方案将是非常棒的。
我知道最佳实践是使用强类型视图并在ViewModel中传递所有所需数据,但我想知道是否有情况下将数据传递给ViewBag/ViewData被认为是“最佳实践”。
在哪些场景下ViewBag/ViewData更适合用于向视图传递数据?
更新
很高兴听到大家对ViewBag/ViewData提出的各种用途。我们可能永远无法得出“最佳实践”,但看到人们依赖ViewBag/ViewData构建的不同解决方案将是非常棒的。
我很少使用它们,只用于与我传递给视图的模型或视图模型完全无关的信息片段,大多数情况下我使用视图模型。
我倾向于使用一些DTO而不是使用viewbag。使用DTO可以让你强类型化你的视图数据。
希望这有所帮助。
通常我会使用强类型视图来显示任何内容,但是我经常会将ViewBag.Member
设置为当前登录的成员,以便它可以在主布局中以及特定视图中使用。
我有一个名为PopulateMemberContext
的属性,它会填充ViewBag.Member
,我将该属性添加到我的基本控制器中,以便每个视图都始终具有必要的数据。
“对”或“错”我不知道 - 但它非常有效。
<%:Html.DropDownList("GetIDHere", new SelectList((IEnumerable<someModel>)ViewData["xyz"]),"select Author")%>
然后,你可以在模型的BookID字段上放置UIHint属性,例如:
public class Book
{
public int BookID{get;set;}
[UIHint("mytemplate")]
public int AuthorID{get;set;}
}
Book
属性和IEnumerable<someModel>
属性,从而为您提供强类型。 - SamStephens