2016-01-21 4 views
0

Я использую MVC6 и Entity Framework 7.Отображение нескольких таблиц на странице просмотра

В основном у меня есть 2 основных стола. Я хочу показать таблицу 1 в списке, указанном на странице просмотра, а затем вытащить из таблицы 2 во время циклического перехода по таблице 1.

Итак, когда я показываю данные таблицы 1, мне нужно найти таблицу 2 данных, которые соответствуют идентификатору записи.

Это 2 модели. Школа

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

Match

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 является текущим сезоном, поэтому я могу» t свяжите эти таблицы вместе. Возможно, я неправильно настрою установку данных.

Это 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

Ваше мнение ожидает IEnumerable из SchoolHomeViewModel, но вы передаете это только один объект SchoolHomeViewModel. – Chad

+0

Здесь я смущаюсь, мне нужно отправить список школ и матчей. Сначала пройдите по школам, затем пройдите через матчи с школами, чтобы отобразить их соответственно. –

ответ

1

Сначала давайте взглянем на то, чтобы принять правильный ModelType - единственный ScholHomeViewModel вместо IEnumerable. Это объявление модели в верхней части представления.

@model PTPWebApp.ViewModels.Schools.SchoolHomeViewModel 

Поскольку вы больше не имеете ваша модель объявлены в виде списка, нет смысла в делать петлю Еогеаспа, но вместо того, чтобы 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

Хорошо, спасибо, что так получилось, что информация о школе начнет появляться. Теперь для данных Match. Открывать ли я там другой файл foreach и проверять, совпадают ли школьники? Я пробовал, но это порождает ошибку, говоря, что у меня уже есть открытый DataReader. –

+0

Nevermind Я добавил MultipleActiveResultSets = true для моей строки подключения, и она сработала. Еще раз спасибо! –

Смежные вопросы