在“视图”页上显示多个表
本文关键字:显示 视图 | 更新日期: 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>