【问题标题】:Using two strongly typed models for one MVC view为一个 MVC 视图使用两个强类型模型
【发布时间】:2010-10-15 13:14:48
【问题描述】:

我是否遗漏了 MVC 原则的基本内容,还是我要疯了?

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

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

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

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

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

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

【问题讨论】:

    标签: asp.net-mvc duplicates


    【解决方案1】:

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

    【讨论】:

    • 您是否应该在视图中键入变量?我认为视图应该只是显示代码还是我太迂腐了?
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 2013-04-10
        • 1970-01-01
        • 1970-01-01
        • 2018-01-21
        • 2013-04-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-08-02
        相关资源
        最近更新 更多