我的情况是Student
和Lesson
之间我的模型中存在多对多的关系。在大多数情况下,课程是1对1,其中单个学生参加课程,但有些情况下课程由多个学生共享(因此多对多)。
所以我的ViewModel看起来有点像这样:
public class ScheduleViewModel
{
public Lesson Lesson { get; set; }
public List<StudentViewModel> Students { get; set; }
public List<StudentViewModel> AllStudents { get; set; }
}
在视图中,我会使用Lesson
绑定DisplayFor
属性,以显示Lesson
的详细信息。然后我会使用DropDownListFor
作为其来源AllStudents
。当用户从列表中选择学生时,将生成第二个DropDown(等)以允许进一步添加学生。这些选择将添加到我的ViewModel的Students
属性中。
过去我会处理这个是javascript并通过JSON和AJAX管理更新。我的直觉是我应该使用MVC模板,但在我的研究中,我没有找到一个具有这种确切场景的例子(或者当然我可能正在咆哮错误的树)。
目前我的View没有代码,因为在这种情况下我真正坚持使用正确的策略。
我希望这是有道理的,对此的任何帮助都非常感激。
非常感谢 西蒙。
答案 0 :(得分:1)
您的课程课程应该对学生具有约束力,如下所示:
<强> Lesson.cs 强>
public class Lesson
{
public int Id { get; set; }
public string Name { get; set; }
public virtual List<Student> Students { get; set; }
}
然后在学生课程中,您将绑定与课程的关系:
public class Student
{
public int Id { get; set; }
public string Name { get; set; }
public virtual List<Lesson> Lessons { get; set; }
}
现在,课程与学生之间存在多对多的关系。
您的viewmodel看起来更像是这样:
public class ScheduleViewModel
{
public Lesson Lesson { get; set; }
// All students property
public List<Student> Students { get; set; }
}
您的Lesson
媒体资源现在包含有关您课程的所有信息,包括哪些学生与之相关联,因为它有一个学生列表。您希望将视图中选定的学生添加到此列表中。
Students
属性用于显示数据库中的所有学生。