2016-03-16 4 views
0

Мне нужно представление, которое отображает строки информации заголовка-детали. Для тривиального случая я создал небольшую базу данных Course-Student с четырьмя простыми таблицами. Таблицы курсов и учеников связаны с таблицей раздела, в которой также есть студент. Кроме того, таблица Student принадлежит таблице типов учащихся. Есть вспомогательные классы для хранения списка «заголовочных» данных для курса и «подробного» списка для каждого учащегося, который принимает этот класс.ASP MVC Вложенные модели

namespace SchoolA.Models 
{ 
public class CourseInfo2 
{ 
    public int CourseID { get; set; } 
    public int CourseNumber { get; set; } 
    public string CourseName { get; set; } 
    public IEnumerable<CourseSectionList> CourseStudentList { get; set; } 
} 
} 
namespace SchoolA.Models 
{ 
public class CourseSectionList 
{ 
    public string Student { get; set; } 
    public string Type { get; set; } 
    public string Grade { get; set; } 
} 
} 

Контроллер:

public ActionResult Courselisting() 
    { 
     List<CourseInfo2> courseInfo2 = new List<CourseInfo2>(); 
     List<CourseSectionList> courseSectionList = new List<CourseSectionList>(); 
     var Cquery = from c in db.Courses select c; 
     foreach (var item in Cquery) 
     { 
      Course course = db.Courses.Find(item.CourseID); // first find the selected course 
      // get the sections 
         foreach (var s in query) // go through each section 
         { 
          // get the section data 
          courseSectionList.Add(new CourseSectionList 
          { 
           Student = student.StudentName, 
           Type = studentType.StudentTypeName, 
           Grade = s.SectionStudentGrade   
          }); 
         } // end of section loop 
      courseInfo2.Add(new CourseInfo2 
      { 
       CourseID = course.CourseID, 
       CourseNumber = course.CourseNumber, 
       CourseName = course.CourseName, 
       CourseStudentList = courseSectionList 
      }); 
     } // end of Course loop 
     return View(courseInfo2); // Course List and Section list for each course 
    } 

Зрения:

@model SchoolA.Models.CourseInfo2        
@* doesn't work either: model List<SchoolA.Models.CourseInfo2>*@ 
<div> 
    <table> 
     <tr><th>ID</th> <th>Number</th> <th>Course</th></tr> 
     @foreach (var CourseInfo2 in Model) 
     { 
      <tr> 
       <td> 
        @CourseInfo2.CourseID 
       </td> 
       <td> 
        @CourseInfo2.CourseNumber 
       </td> 
       <td> 
        @CourseInfo2.CourseName 

       </td> 
       <td> 
        <table class="table"> 
         <tr><th>Student</th> <th>Type</th><th>Grade</th></tr> 
         @foreach (var s in Model.CourseStudentList) 
         { 
          <tr> 
           <td> 
            @s.Student 
           </td> 
           <td> 
            @s.Type 
           </td> 
           <td> 
            @s.Grade 
           </td> 
          </tr> 
         } 
        </table> 
       </td> 
      </tr> 
     } 
    </table> 
</div> 

Проблема заключается в том, что я получаю различные ошибки, как я стараюсь передать эти две модели с точки зрения , В коде, как показано выше, я получаю эту ошибку:

CS1579: foreach statement cannot operate on variables of type 'SchoolA.Models.CourseInfo2' because 'SchoolA.Models.CourseInfo2' does not contain a public definition for 'GetEnumerator' 

Я пытался несколько вариаций для прохождения модели, но всегда работаю в одной ошибок других другие, что позволяет обе модели работать в представлении. Я должен отметить, что я тестировал каждую часть представления независимо, и код контроллера работает отлично, чтобы доставить правильные данные в представление. Однако я не могу объединить эти два.

Проблема заключается в том, как я создаю экземпляры моделей так, как они передаются в представление. Что я делаю не так?

ответ

0

Вы просматриваете List<SchoolA.Models.CourseInfo2>, но в представлении ожидаются только SchoolA.Models.CourseInfo2.

Измените ваше объявление @model на IEnumerable<SchoolA.Models.CourseInfo2>.

Затем измените свои петли foreach.

Изменение первого контура для foreach (var courseInfo in Model)

Изменение внутреннего контура для foreach (var s in courseInfo.CourseStudentList)

+0

JB06 - OMG! Это сработало, и я осознаю свою ошибку сейчас. Я долго пробовал это - большое спасибо! –

0

Вы передаете модель, которая список объектов, в то время как с точки зрения у вас есть одного объекта.

Изменение вида модели привязки, как показано ниже:

@model List<SchoolA.Models.CourseInfo2> 
Смежные вопросы