为一个MVC视图使用两个强类型模型

时间:2009-03-25 19:48:23

标签: asp.net-mvc duplicates

我是否遗漏了一些MVC原理的基本内容,还是我发疯了?

如果我有一个显示书籍列表和作者列表的视图,我必须创建具有书籍列表和作者列表作为属性的类。对?

然后我会强烈键入视图以使用此类。

现在我想创建一个包含相同列表的新页面,但也有一个促销列表。我是否需要创建另一个包含Books属性列表,authors属性列表和促销列表属性的类?

如果我正在为所有视图创建类,我正在创建一些额外的工作。我应该为这些中的每一个创建强类型的部分吗?如果布局每次都不同怎么办?

目前我有一个由所有视图使用的BaseViewData类,因为它包含一些常见属性。但是,我现在正在努力获取其他项目而不会完全膨胀BaseViewData类。

请有人帮助我理解所有简单例子都没有涵盖的理论。

3 个答案:

答案 0 :(得分:3)

我使用ViewData extension methods中的MvcContrib添加对多个强类型模型的支持(只要它们是不同的类型)。将它们添加到ViewData的代码如下所示:

User currentUser = GetCurrentUser();
List<Project> projectList = projectRepository.GetRecentProjects(currentUser);
ViewData.Add(user);
ViewData.Add(projectList);

视图中的代码将它们拉出来看起来像这样:

User user = ViewData.Get<User>();
List<Project> projectList = ViewData.Get<List<Project>>();

这将删除“魔术字符串”和类型转换。注意,这对视图的Model属性没有任何作用。

答案 1 :(得分:1)

为系统中的任何对象创建一个容器类,并用于所有视图 - 简单

具有空值的对象没有实际开销

答案 2 :(得分:0)

我遇到了同样的问题。我认为大多数人的一般解决方案是创建一个容器类,其中包含您真正想要的Books和Authors模型,并将该容器传递给View。

次优,是的,但它确实有效。希望这将在框架的未来版本中得到解决。