在MVC中返回并使用多个模型

mic*_*ver 9 asp.net-mvc entity-framework asp.net-mvc-3

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

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

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

return View(lemondb.Messages.Where(p => p.user == tmp_username).ToList(), lemondb.Lemons.Where(p => p.acidity >= 2).ToList());
Run Code Online (Sandbox Code Playgroud)

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

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

@model IEnumerable<ElkDogTrader.Models.Message>
Run Code Online (Sandbox Code Playgroud)

我经常在视图中调用"模型".

@foreach (var item in Model)
Run Code Online (Sandbox Code Playgroud)

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

这可能是多个模型,或者这就是为什么人们使用ViewBag和ViewData?

Mat*_*att 18

您可以创建表示视图所需数据的自定义模型.

public class UserView
{
    public User User{get;set;}
    public List<Messages> Messages{get;set;}
}
Run Code Online (Sandbox Code Playgroud)

然后,

return View(new UserView(){ User = user, Messages = message});
Run Code Online (Sandbox Code Playgroud)

在视图中:

Model.User;
Model.Messages;
Run Code Online (Sandbox Code Playgroud)

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

如果您在视图数据类型上有一次性并且知道类型并且将在视图中进行转换,则ViewData非常有用.有些人喜欢将实际类型化视图保持纯粹,因为它只代表主要模型,其他人喜欢在编译时利用类型检查,因此需要制作视图所需的自定义模型.