5

我错过了 MVC 原则的基本内容还是我要疯了?

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

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

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

如果我为所有视图创建类,我会创建大量额外的工作。我应该为每一个创建强类型的部分吗?如果每次布局都不一样怎么办?

目前我有一个所有视图都使用的 BaseViewData 类,因为它包含一些公共属性。但是,我现在正在努力在不完全膨胀 BaseViewData 类的情况下获取其他项目。

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

4

3 回答 3

3

我使用来自MvcContrib的ViewData 扩展方法,它添加了对多个强类型模型的支持(只要它们是不同的类型)。将它们添加到 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 属性没有任何作用。

于 2009-03-25T21:21:05.893 回答
1

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

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

于 2009-03-25T20:09:20.340 回答
0

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

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

于 2009-03-25T20:03:13.820 回答