如何在MVC剃刀视图中使用两个以上的模型?

Aqi*_*ban 0 c# linq asp.net-mvc controller model

我已经使用实体数据模型向导为 SQL 服务器中的表创建了一个实体框架,但是我需要在 MVC 的 razor 视图中使用两个以上的模型,目前我有一个现有的 linq 查询:

控制器视图

var test = from a in db.tbl_users
       where a == 2
       select a;

return view (test.ToList());
Run Code Online (Sandbox Code Playgroud)

剃刀视图:

@model IEnumerable <Telephone_Search.Models.tbl_users>

@foreach (var item in model)

@HTML.DisplayFor(modelItem => item.users)
Run Code Online (Sandbox Code Playgroud)

但是我计划访问存在于我想要循环的实体框架中的其他表,像这样

@model IEnumerable <Telephone_Search.Models.'EntityFramework'>

@foreach (var item in 'entityframework')

@HTML.DisplayFor(modelItem => EntityFramework.'table'.'item')
Run Code Online (Sandbox Code Playgroud)

我试图创建一个视图模式,但是我的类在模型文件夹中是分开的,我不确定如何将这些类包装到一个视图模型中?

San*_*hos 5

您必须创建一个新类,通常称为 ViewModel 并在该类中传递数据:

public class MyViewModel
{
  public IEnumerable<Telephone_Search.Models.tbl_users> users;
  public IEnumerable<OtherType> otherThings;
  public string SomeOtherProp {get;set;}
}
Run Code Online (Sandbox Code Playgroud)

在视图中:

@model MyViewModel

foreach (var usr in Model.users) {...}
foreach (var ot in Model.OtherThings) {...}
<span>@Model.SomeOtherProp</span>
Run Code Online (Sandbox Code Playgroud)

在控制器中:

var test = from a in db.tbl_users
       where a == 2
       select a;

var otherTypes = from x in db.tbl_otherTypes where x.Prop > 10 select x;

return this.View(new MyViewModel
{
  users = test,
  otherThings = otherTypes,
  SomeOtherProp = "stackoverflow answer"
});
Run Code Online (Sandbox Code Playgroud)