【问题标题】:returning and using multiple models in MVC在 MVC 中返回和使用多个模型
【发布时间】:2011-06-01 18:39:42
【问题描述】:

我已经能够成功地将模型返回到视图并以强类型的方式显示结果。

我从未见过返回多个模型的示例。我该怎么办?

我想控制器会有这样的东西:

return View(lemondb.Messages.Where(p => p.user == tmp_username).ToList(), lemondb.Lemons.Where(p => p.acidity >= 2).ToList());

MVC 是否允许您返回多个这样的模型?

然后在视图中,我在文件顶部有这一行:

@model IEnumerable<ElkDogTrader.Models.Message>

而且我经常在视图中调用“模型”。

@foreach (var item in Model)

如果有 2 个模型,我将如何分别引用它们?

这是否可能适用于多个模型,或者这就是人们使用 ViewBag 和 ViewData 的原因?

【问题讨论】:

    标签: asp.net-mvc entity-framework asp.net-mvc-3


    【解决方案1】:

    您可以创建一个自定义模型来表示您的视图所需的数据。

    public class UserView
    {
        public User User{get;set;}
        public List<Messages> Messages{get;set;}
    }
    

    然后,

    return View(new UserView(){ User = user, Messages = message});
    

    在视图中:

    Model.User;
    Model.Messages;
    

    ViewBag 很有用,因为它是动态类型的,因此您可以直接引用其中的成员而无需强制转换。但是,您这样做会在编译时丢失静态类型检查。

    如果您有一次性的视图数据类型并且知道类型并且无论如何都会在视图中进行转换,那么 ViewData 会很有用。有些人喜欢在某种意义上保持实际类型化视图的纯粹性,因为它只代表主要模型,而另一些人则喜欢在编译时利用类型检查,从而为视图制作自定义模型。

    【讨论】:

    • 我肯定会支持自定义视图模型方法。不要为视图中单个强类型模型的限制而挣扎,它只是不起作用......(实际上,它适用于简单的情况,但缺乏更复杂的场景)。我还主张真正花时间微调您的视图模型的要求,因为您会发现它可以发展自己的生命,除非您将其定位在手头的任务上。不要尝试创建另一个通用视图模型,每个基本模型都有一个视图模型,一个用于编辑,另一个用于创建功能
    • 就我而言,我想要一个显示所有有趣内容的“快照”的索引页面——基本上是所有模型中最有趣的字段。我猜它不会增长,因为它已经很大了。如果里面有我所有的表格/模型,会不会太通用了?还是您只是指插入/更新/删除/等意义上的通用?
    【解决方案2】:

    我相信 ViewModel 应该是要走的路。在惯用的 ViewModel 中,您可以引用其他模型或在 viewModel 本身中定义所有相关的领域模型。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多