显示来自学校的学生

时间:2014-02-25 15:30:15

标签: c# html sql asp.net-mvc model-view-controller

我有一份我正在展示的学校名单。在每个学校的下拉列表中,我只想显示学生表中的学生,其表格中fk等于pk。离开表有fk school_schoolId。有很多学校。例如在学生表中 - studentId = 1,depart_departId = 4,school_schoolId = 4。      在学校表 - schoolId = 4 因此,学生1将列在学校4下。

@foreach (var item in Model.School)
{
   @:<tr style="background-color:grey;-moz-border-radius: 15px;border-radius: 15px;">           
      <td class="accordion" style="width: 50%;padding-left: 10px;text-align: left;">
         <a href="#">@item.Name</a>
         <div style="font-size:10px;">
            @foreach (var student in Model.students)
            {         
               <div style="background-color:grey;width:100%;padding-top:10px; margin-bottom:10px">
                  <span style="margin-left:8%; text-align: center">@student.Name</span>
               </div>
            }
         </div>                                                                               
      </td>
   @:</tr>                                               
}

2 个答案:

答案 0 :(得分:3)

您可以使用.Where

@foreach (var student in Model.students.Where(s => s.SchoolId == item.SchoolId)) 
{

}

你可以在你的模型中过滤掉这个,而不是在视图中做逻辑。也许像AvailableStudentsModel这样的东西。您还可以在Students上编写一个扩展方法,以确定它们是否在该学校中更有效并使您的代码更具可读性。然后,您可以使用它来填充我提到的AvailableStudentsModel

答案 1 :(得分:1)

根据代码,似乎Model没有正确表示数据。

在第一个循环中,您将遍历所有学校。这很好。

(我会将变量的名称更改为school以更好地表示其角色 - 仅为了清晰起见。我还会将School属性的名称更改为复数{{ 1}}表示它有一堆它们。)

Schools

但是在第二个循环中,它嵌套在第一个循环中,你循环遍历所有学生,而不仅仅是当前学校的学生。

更好的方法是在@foreach (var school in Model.Schools) 模型类中添加Students属性,然后循环遍历当前学校的学生:

School

当您在@foreach (var student in school.Students) (或您构建它的任何地方)中构建模型时,请确保将每个学校的学生添加到正确的Controller集合中。如果您正确配置,实体框架可以为您构建这样的层次结构。