これがこれを説明する最良の方法であることを願っています...
学校、コース、クラスの 3 つのビュー オブジェクトがあります。各学校には複数のコースがあり、各コースには複数のクラスがあります (コースを学習プログラムと考えてください。クラスは実際のクラスです)。私のメイン ビューでは、すべての学校を表示し、1 つをクリックしてそこに移動します。その「CourseView」ページには、学校の名前と、その学校に関連付けられているすべてのコースが表示されます。私がやろうとしているのは、各コースに関連付けられたすべてのクラスもリストされていることです。これは可能ですか (私がまだ学んでいる大量の jQuery/JSON ウィザードがなければ)?
public class School
{
public int Id { get; set; }
public string SchoolName { get; set; }
public string WelcomeMsg { get; set; }
public string SchoolLogo { get; set; }
public List<Course> Courses { get; set; }
}
public class Course
{
public int Id { get; set; }
public string CourseCode { get; set; }
public string CourseName { get; set; }
public int SchoolId { get; set; }
public List<Class> Classes { get; set; }
}
public class Class
{
public int Id { get; set; }
public string ClassNumer { get; set; }
public int CourseId { get; set; }
public int InstructorId { get; set; }
}
私のSchoolDAO.csには、次のものがあります。
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@SchoolId", SchoolId);
using (SqlDataReader dr = cmd.ExecuteReader())
{
if (dr.Read())
{
// fill school object in another method.
school = readRecord(dr);
}
}
// Get all courses available for this school.
school.Courses = CoursesDAO.GetCourses(SchoolId);
return school;
}
また、CourseDAO.cs のメソッドを呼び出して、その学校で利用可能なコースを取得します。
{
SqlCommand cmd = new SqlCommand("Courses.GetCourses", conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@SchoolId", SchoolId);
using (SqlDataReader dr = cmd.ExecuteReader())
{
while (dr.Read())
{
courses.Add(readRecord(dr));
}
}
// Get all classes available for each course.
foreach (var course in courses)
{
course.Classes = ClassDAO.GetClasses(course.Id);
}
return courses;
}
次に ClassDAO メソッドを呼び出して、各コースのすべてのクラスを取得します。
{
SqlCommand cmd = new SqlCommand("Courses.GetCourses", conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@SchoolId", courseId);
using (SqlDataReader dr = cmd.ExecuteReader())
{
while (dr.Read())
{
classes.Add(readRecord(dr));
}
}
return classes;
}
最後に、私の質問は次のとおりです。モデルからビューに学校、コース、およびクラスのリストを表示するにはどうすればよいですか?
My View には次のようなものがあります。これには、私が見ている学校とその学校のコースのリストが表示されます。
<div class="display-field">
<h1><%: Model.SchoolName %></h1>
<h3><%: Model.WelcomeTitle %></h3>
<blockquote> <i><%: Model.WelcomeText %></i></blockquote>
</div>
<!-- Courses -->
<div class="display-field">
<table id="courses">
<thead>
<th>Course Code</th>
<th>Course Name</th>
</thead>
<tbody>
<%
foreach (var item in Model.Courses) {
%>
<tr>
<td><%: Html.DisplayFor(model => item.CourseCode) %></td>
<td><%: Html.DisplayFor(model => item.CourseName) %></td>
</tr>
<% } %></tbody>
</table>
</div>
そのテーブルの後に、id="classes" で別のテーブルを配置したかったのですが、悲しいことに、私がやろうとすると:
<%
foreach (var class in Model.Courses) {
%>
<tr>
<td><%: Html.DisplayFor(model => item.ClassNumber) %></td>
</tr>
<% } %>
それは機能しません-リストに属するリストにアクセスする方法がわからないか、それがモデルの動作方法ではないためだと思います。
これについての洞察は大歓迎です。ありがとう!
PS - 情報は、次のような単純な方法で DAO -> ビジネス -> コントローラーから渡されます。
スクールコントローラー:
public ActionResult ViewSchool(int Id)
{
School school = SchoolBusiness.GetSchool(Id);
return View(school);
}
SchoolBusiness.GetSchool:
public static School GetSchool(int Id)
{
School school = SchoolDAO.GetSchool(Id);
return school;
}