传递ViewData与创建新类

时间:2009-07-13 15:33:01

标签: asp.net asp.net-mvc viewdata

我在StackOverflow和其他地方看过几篇文章讨论了将来自多个实体的数据整合到强类型视图中的各种方法,这些方法是使用ViewData对象或构建一个利用这两个实体的新自定义类。

对我来说,似乎如果你代表某种新的混合实体,你会想要创建一个新类并将其视为这样。但是,我可以看到使用视图数据的原因,如果您传入的数据不是您正在使用的实体的一部分,但仍在您的模型中,例如下拉列表或其他UI元件。

我看到人们出于各种原因主张其中一个,我想知道何时使用一个而不是另一个?

2 个答案:

答案 0 :(得分:8)

一旦我使用了类型化的ViewDataModels。我从来没有需要将东西放在ViewData字典中并在View中使用魔术字符串。魔术弦很脏,很容易出错。

我通常做的是为我的所有控制器创建一个ViewDataModel类,即:

  • 的HomeController
  • HomeModel
  • HomeViewDataModel
  • 主页ActionResult查看页面。

所有这些* ViewDataModel扩展了一个常见的ViewDataModel类,用于将全局站点配置数据传递给视图。

我并不关心我在ViewDataModel中添加的内容。如果我需要它,我将它作为属性并在需要时填充它,无论是LINQ to SQL类还是任意菜单配置类。

即使您不需要除模型对象之外的其他属性,稍后添加属性比重新键入视图更容易。我的很多ViewDataModel类都包含1个属性,但知道我可以添加更多而不需要重构任何东西是一种幸福。

我经常将ASP.NET MVC视为ASP.NET MVVM作为传输器ViewDataModel类,它将模型和垃圾(?)数据传输到视图中发挥了巨大作用。

答案 1 :(得分:0)

我不确定创建ViewModel对象是一个非常好的做法,只剩下要返回的模型。它只是为服务器创建了更多垃圾收集对象。我认为使用ViewModel是好的,但只在你需要它时。但我同意必须避免使用魔法字符串这一事实。它会创建较弱的代码,以后更难维护。