ASP.NET MVC2:如果有多个不同的模型,如何渲染视图

ASP.NET MVC2:如果有多个不同的模型,如何渲染视图,asp.net,asp.net-mvc,asp.net-mvc-2,Asp.net,Asp.net Mvc,Asp.net Mvc 2,我知道视图模型可用于呈现视图,但如果页面需要不同的模型,如何将它们传递给视图?如何使用它们?如果需要传递多个模型,则创建一个包含所有模型的模型,其中较小的模型作为属性挂起 例如,假设您将显示一个页面,用于管理应用程序的用户组。您可能需要将IEnumerable和IEnumerable传递给视图。创建新的显示模型,如下所示: class GroupManagementDisplayModel { public IEnumerable<UserDisplayModel> User

我知道视图模型可用于呈现视图,但如果页面需要不同的模型,如何将它们传递给视图?如何使用它们?

如果需要传递多个模型,则创建一个包含所有模型的模型,其中较小的模型作为属性挂起

例如,假设您将显示一个页面,用于管理应用程序的用户组。您可能需要将
IEnumerable
IEnumerable
传递给视图。创建新的显示模型,如下所示:

class GroupManagementDisplayModel
{
    public IEnumerable<UserDisplayModel> Users { get; set; }
    public IEnumerable<GroupDisplayModel> Groups { get; set; }
}
类GroupManagementDisplayModel
{
公共IEnumerable用户{get;set;}
公共IEnumerable组{get;set;}
}

将此模型的实例传递给您的视图。

如果您发现自己非常想这样做,并且不太喜欢创建许多小类型,则可以使用.NET 4的
动态
类型:

<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<dynamic>" %>
在您的视图中引用它们,就像您在其他视图中引用它们一样


通过这种方式,您将失去intellisense和强输入功能,但除非您正在编译视图(这需要手动编辑.csproj文件并使生成速度大大降低),否则您将无法对视图进行编译时检查。

是的,这就是您要做的。然后您将可以访问intellisense,以帮助您选择要使用的属性。没问题。就我个人而言,我不使用这种方法,因为我喜欢intellisense,Resharper使生成小型类型变得快速和简单,但为了完整性,我在这里包含了这个答案。
return View(new { Users, Groups });