2016-01-21 74 views
0

我正在使用MVC6和實體框架7.在查看頁面上顯示多個表

基本上我有2個主表。 我想在查看頁面的枚舉列表中顯示錶1,然後從表2中循環通過表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

你的觀點是希望SchoolHomeViewModel的IEnumerable但你通過它只有一個SchoolHomeViewModel對象。 – Chad

+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> 
+0

好的,非常感謝你讓學校的信息開始顯示出來。現在匹配數據。我在那裏打開另一個foreach,並檢查學生是否匹配然後顯示?我嘗試過,但它引發了一個錯誤,說我已經有了一個開放的DataReader。 –

+0

Nevermind我添加了MultipleActiveResultSets = true到我的連接字符串,它的工作。再次感謝! –