多个模型发送到单个视图实例

nat*_*ere 8 asp.net asp.net-mvc model

我的术语可能不在这里,但基本上我正在尝试将多个数据模型传递给视图.为了帮助将问题放在上下文中,请使用以下示例:

说我正在写博客.当我登录时,我希望主屏幕显示所有新未批准的评论列表,以及最近注册的用户列表,以及最近提交的博客帖子列表.

我见过的大多数讨论建议强烈输入视图页面,以便可以通过"返回视图(RecentComments)"和迭代视图中的注释来调用它,或者像"new NewUsers =(MembershipUserCollection)一样转换数据模型". )ViewData.Model".我理想的是,在保持适当的逻辑分离的同时,传递多个模型的"正确"或至少是"足够正确"的方式.

Eil*_*lon 14

一种方法是创建一个封装两个模型数据的新类型:

public class MyBigViewData {
    public SubData1 SubData1 { get; set; }
    public SubData2 SubData2 { get; set; }
}

public class SubData1 {
    ... more properties here ...
}

public class SubData2 {
    ... more properties here ...
}
Run Code Online (Sandbox Code Playgroud)

另一种方法是将"主"模型数据存储为强类型数据,并将其他数据作为字典项存储在视图数据中:

ViewData["username"] = "joe"; // "other" data
ViewData["something"] = "whatever"; // "other" data
ViewData["subdata1"] = new SubData1(...);
return View(myRealModelData);
Run Code Online (Sandbox Code Playgroud)

第二种方法的优点是你根本不需要做任何特殊的事情:它开箱即用.


spl*_*tto 8

我过去所做的是编写一个类,其中包含我在视图中需要的两个类的实例.

public class City{
public Mall TheMall;
public School TheSchool;
}
Run Code Online (Sandbox Code Playgroud)

那么您的视图将被强类型为City,您将使用Model.Mall.Property和Model.The.School.Property来访问您需要的内容

编辑

这是其他海报通过创建具有两个对象作为字段/属性的对象的含义的示例