我正在使用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)
}
这是我感到困惑的地方,我知道代码已被破坏并且无法运行。我需要发送一份学校和比赛清单。首先在学校中循环,然后在学校内的比赛中循环显示相应的内容。
答案 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>