【发布时间】:2013-02-11 23:18:20
【问题描述】:
例如我有模型:
Student 和 Course。
Student 有一个List<Course> Courses{get;set;}
所有数据都已从网络服务中填充
我有一个Student/Index,它返回一个ActionResult,它采用StudentViewModel
但我也有一个 Course/Index 视图,它返回一个 ActionResult 需要一个 CourseViewModel
这应该为我的问题奠定基础:
如果我遵循这个选项可以吗,我认为它非常简洁:
在Student/Index 视图中创建ViewModel 的实例
@foreach(var course in Model.Courses)
{
Html.RenderPartial("path/tocourse",
new CourseViewModel{Course = course}) ;
}
或者我应该让StudentViewModel 拥有List<CourseViewModel>,这样我就可以拥有:
@foreach(var courseViewModel in Model.CourseViewModels)
{
Html.RenderPartial("path/tocourse", courseviewModel) ;
}
乍一看,上面的内容可能看起来更好,但在Index 操作(或其他)中,它需要我执行以下操作:
new StudentViewModel{
CourseViewModels = courses.Select(c=>new CourseViewModel{copy stuff}).ToList()
}
我讨厌这样,而且它可能会在以后让我或其他开发人员感到困惑,因为另一个间接方式使我可以访问课程,即StudentViewModel.StudentModel.Courses。
那么哪种方法更好呢?在View 中创建ViewModel 或Model 的实例肯定不会那么糟糕?
【问题讨论】:
-
FWIW 我通常在中间添加一个层来“组合”更复杂的视图模型,以避免控制器和/或重复逻辑的混乱(请参阅我的答案stackoverflow.com/a/14132184/453277)。
-
@TimMedora 您的回答介绍了很多我需要阅读的术语。作曲家? :P
-
这感觉像是一个更适合 programmers.stackexchange.com 的问题 - 我认为“可以吗...”没有一个规范的答案
标签: c# asp.net-mvc asp.net-mvc-3 asp.net-mvc-4 partial-views