MVC在索引视图中获取子计数

时间:2015-03-02 14:55:43

标签: c# asp.net-mvc entity-framework

我使用脚手架来创建索引,详细信息,创建,编辑和删除视图以及控制器。我有两个视图模型(父/子)关系。在我的索引视图中,我想显示团队列表以及有关玩家的一些信息(父/子)。例如,我想在“索引”视图中显示每个球队的球员数量和最后被修改球员的球队。我不知道从哪里开始。 例: (队)红色 - (上次修改时间)2015年1月2日 - (号码玩家)10等等。

Team ViewModel

public class TeamVM
 {
public int ID { get; set; }    
public string Name { get; set; }
public DateTime? LastActivity { get; set; }
public string NumberPlayers { get; set; }

public IList<PLayerVM> PlayerVM { get; set; }
}

播放器ViewModel

public class PlayerVM
{
public int ID { get; set; }
public int TeamID { get; set; }

public string PlayerInfo { get; set; }
public DateTime? CreateDate { get; set; }
}

其他ViewModel

public class TeamViewModel
{
public List<Team> Teams{ get; set; }
}

控制器

public ActionResult Index()
{      
  TeamViewModelviewModel = new TeamViewModel();
  viewModel.Teams= db.Teams.ToList();

  return View(viewModel);
}

1 个答案:

答案 0 :(得分:0)

db.Products.ToList()?我假设你的意思是db.Teams.ToList()

您正在使用视图模型,因此您应首先将db数据映射到viewmodels:

public ActionResult Index()
{   
    var teams = db
        .Teams
        .Include("Players") // Assuming your Team entity has a collection of Players
        .SelectMany(t => new TeamVM { 
            ID = t.ID, 
            // etc.. 
        })
        .ToList();   
    return View(new TeamViewModel { Teams = teams });
}

模型:

public class TeamVM
{
    public int ID { get; set; }    
    public string Name { get; set; }
    public DateTime? LastActivity { get; set; }

    public IList<PLayerVM> PlayerVM { get; set; }

    public int NumberPlayers { 
        get { return PlayerVM.Count(); }
    }
}

然后在你看来:

@model MyProject.Models.TeamViewModel

<table>
@foreach(var team in Model.Teams.ToList()) {
    <tr>
        <td>@team.Name</td> // Name
        <td>@team.NumberPlayers</td> // Playercount
        <td>@team.PlayerVM.Max(p => p.LastActivity).LastActivity</td> // Last edited
    </tr>
}
</table>