在“查看”页面上显示多个表格

时间:2016-01-21 16:13:08

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

我正在使用MVC6和Entity Framework 7。

基本上我有2个主表。 我想在视图页面的枚举列表中显示表1,然后在表1中循环时从表2中拉出。

因此,当我显示表1的数据时,我需要查找与记录的Id匹配的表2数据。

以下是2个型号。 校

public class School
{
    [Key]
    public int SchoolId { get; set; }
    [Required]
    [Display(Name = "Name")]
    public string SchoolName { get; set; }
}

匹配

public class Match
{
    [Key]
    public int MatchId { get; set; }
    public int SchoolId { get; set; }
    public int SeasonId { get; set; }
    public School School { get; set; }
    public Season Season { get; set; }
}

因此,我需要从匹配表中取出,其中SchoolId与我正在显示的当前学校相匹配,而SeasonId是当前季节,这就是为什么我无法将这些表格链接在一起的原因。也许我认为数据结构设置错误。

这是我开始研究的ViewModel,我认为我设置错了。

public class SchoolHomeViewModel
{
    public IQueryable<School> SchoolData { get; set; }
    public IQueryable<Match> MatchData { get; set; }
}

这是控制器代码。

public IActionResult Index()
    {
        var vm = new SchoolHomeViewModel();
        vm.SchoolData = _context.Schools;
        vm.MatchData = _context.Matches
            .Where(s => s.SeasonId == 1);
        return View(vm);
    }

最后,我无法弄清楚如何正确编码的视图

@model IEnumerable<SchoolHomeViewModel>
@foreach (var item in Model)
{
   @Html.DisplayFor(modelItem => item.SchoolData)
   @Html.DisplayFor(modelItem => item.MatchData)
}

这是我感到困惑的地方,我知道代码已被破坏并且无法运行。我需要发送一份学校和比赛清单。首先在学校中循环,然后在学校内的比赛中循环显示相应的内容。

1 个答案:

答案 0 :(得分:1)

首先,让您的视图接受正确的ModelType,单个ScholHomeViewModel而不是IEnumerable。这是视图顶部的模型声明。

@model PTPWebApp.ViewModels.Schools.SchoolHomeViewModel

由于您不再将模型声明为列表,因此在执行foreach循环时没有任何意义,而是将SchoolData和MatchData作为列表本身。因此,让我们在循环中重做我们正在做的事情:

<table>
<th><td>School ID</td><td>School Name</td></th>
    @foreach (var school in item.SchoolData)
    {
       @<tr>
            <td>@school.SchoolId</td>
            <td>@school.SchoolName</td>
       </tr>
    }
</table>