我是否遗漏了一些MVC原理的基本内容,还是我发疯了?
如果我有一个显示书籍列表和作者列表的视图,我必须创建具有书籍列表和作者列表作为属性的类。对?
然后我会强烈键入视图以使用此类。
现在我想创建一个包含相同列表的新页面,但也有一个促销列表。我是否需要创建另一个包含Books属性列表,authors属性列表和促销列表属性的类?
如果我正在为所有视图创建类,我正在创建一些额外的工作。我应该为这些中的每一个创建强类型的部分吗?如果布局每次都不同怎么办?
目前我有一个由所有视图使用的BaseViewData类,因为它包含一些常见属性。但是,我现在正在努力获取其他项目而不会完全膨胀BaseViewData类。
请有人帮助我理解所有简单例子都没有涵盖的理论。
答案 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。
次优,是的,但它确实有效。希望这将在框架的未来版本中得到解决。