Мне нужно представление, которое отображает строки информации заголовка-детали. Для тривиального случая я создал небольшую базу данных 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'
Я пытался несколько вариаций для прохождения модели, но всегда работаю в одной ошибок других другие, что позволяет обе модели работать в представлении. Я должен отметить, что я тестировал каждую часть представления независимо, и код контроллера работает отлично, чтобы доставить правильные данные в представление. Однако я не могу объединить эти два.
Проблема заключается в том, как я создаю экземпляры моделей так, как они передаются в представление. Что я делаю не так?
JB06 - OMG! Это сработало, и я осознаю свою ошибку сейчас. Я долго пробовал это - большое спасибо! –