MVC 3多对多关系和ViewModels

时间:2014-02-14 23:45:19

标签: c# asp.net-mvc many-to-many mvc-editor-templates

我的情况是StudentLesson之间我的模型中存在多对多的关系。在大多数情况下,课程是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没有代码,因为在这种情况下我真正坚持使用正确的策略。

我希望这是有道理的,对此的任何帮助都非常感激。

非常感谢 西蒙。

1 个答案:

答案 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属性用于显示数据库中的所有学生。