2012-02-27 41 views

回答

3

如果你已经有了一个强类型的视图,你真的甚至不应该考虑ViewBag/ViewData。一旦你强类型视图视图模型所有你必须在这个观点做的是使用该视图模型的属性,就像这样:

@foreach (viewModel vm in Model.SomeSubModels) 
{ 
    //some foo bar 
} 

,甚至更好,避免在您的看法可怕foreach循环(如果你需要编辑一些属性),你可以使用使用编辑器模板:

@Html.EditorFor(x => x.SomeSubModels) 

或使用显示器模板(如果你只想要显示给用户的视图模型属性的值):

@Html.DisplayFor(x => x.SomeSubModels) 

因此,这里的一对夫妇的基本规则设计一个ASP.NET MVC应用程序(按顺序)时应遵循:

  1. 你忘记ViewBag/ViewData的。就好像它们不存在一样。你只是将它们抹去而已。如果你忘了他们,你会为自己做一个真正的服务。
  2. 您定义了一个视图模型,该模型是一个包含视图将需要的所有属性的类。
  3. 您有控制器操作查询您的存储库和域模型,并将结果映射到将传递给视图的此视图模型。
  4. 在相应的视图中,您只需使用控制器操作提供的视图模型的属性来显示一些信息。

规则1是真正的基础和最重要的。如果你不尊重这个规则,你真的没有正确地做ASP.NET MVC。

+0

我有一个列出项目的视图,也允许创建项目。当用户希望创建一个项目时,我不想回发整个列表,在这种情况下,我选择不使用强类型视图模型,因为我不想仅仅重新发布整个列表添加一个项目。 – 2012-02-27 22:49:08

+0

@TravisJ,绝对没有你不应该在ASP.NET MVC中使用强类型视图模型的情况,你应该选择使用ViewBag/ViewCrap。查看模型是要走的路。他们会解决你所有的问题。只是不要害怕给你的项目添加新的类。 – 2012-02-27 22:50:05

+0

如果用'[httppost]'装饰的控制器接受视图模型,并且视图模型被传递到视图中并显示完整列表,那么不会发布该列表? – 2012-02-27 22:50:37