在连接查询的视图中显示2个模型

时间:2014-05-31 15:31:04

标签: c# sql asp.net-mvc asp.net-mvc-4 razor

我正在尝试在我的视图中显示已加入的查询结果,但我一直收到此错误:

  

传递到字典中的模型项是类型的   ' {System.Collections.Generic.List {1}} 2 [MvcFFL.Models.TmPlyrs,MvcFFL.Models.Player]]&#39 ;,   但是这个字典需要一个类型的模型项   ' System.Collections.Generic.IEnumerable`1 [MvcFFL.Models.TmPlyrs]'

这是从控制器返回的查询:

1[<>f__AnonymousType4

现在,我的视图将如何查看数据:

var z = (from y in db.Teamplayers
                join p in db.Players on y.playerid equals p.Nid
                select new { y, p }).ToList();

        return View(z);

如何让它在没有错误的情况下返回结果?

2 个答案:

答案 0 :(得分:2)

由于视图仅绑定到一个Model类,因此无法将两个模型对象传递给视图,因此您需要创建一个View Model类,该类将具有两个类的属性。

假设您的模型是这样的:

public class TeamPlayers
{

    public int Id {get;set;}
    public int Name {get;set;}
    public int Nid {get;set;}
    ..........................
    ..........................

}


public class Player
{

public int PlayerId {get;set;}
public int PlayerName {get;set;}
................................
................................
}

在项目中创建一个名为 ViewModels 的文件夹,并创建一个具有两种模型属性的ViewModel:

public class TeamPlayersViewModel
{

    public int Id {get;set;}
    public string Name {get;set;}
    public int Nid {get;set;}
    public int PlayerIdId {get;set;}
    public string PlayerName {get;set;}
    ...................................
    ...................................
}

现在你的linq查询:

var z = (from y in db.Teamplayers
         join p in db.Players on y.playerid equals p.Nid
         select new TeamPlayersViewModel{
         Id= y.Id,
         PlayerName = p.PlayerName,
         ..........................
         .......................... }).ToList<TeamPlayersViewModel>();

现在在您的视图中更改模型:

@model List<MvcFFL.ViewModels.TeamPlayersViewModel>

@{
    ViewBag.Title = "Index";
 }

<h2>Index</h2>

答案 1 :(得分:0)

首先创建一个新模型

class MyModel{
   Teamplayers team{get; set;}
   Players players{get; set;}
}

在视图中将模型类型设置为MyModel

然后

var z = (from y in db.Teamplayers
                join p in db.Players on y.playerid equals p.Nid
                select new MyModel { team=y, players=p }).ToList();

        return View(z);