在“视图”页上显示多个表

本文关键字:显示 视图 | 更新日期: 2023-09-27 18:31:17

我正在使用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 是当前赛季,这就是为什么我无法将这些表链接在一起的原因。也许我弄错了数据结构设置。

这是我开始工作的视图模型,我想我设置错了。

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)
}

这就是我感到困惑的地方,我知道代码已损坏并且无法运行。我需要发送学校和比赛列表。首先循环浏览学校,然后在学校内的比赛中循环显示。

在“视图”页上显示多个表

首先,让我们让你的视图接受正确的模型类型,一个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>