2014-02-14 73 views
1

我有一種情況,我在我的模型中有StudentLesson之間的多對多關係。在大多數情況下,教訓是一對一的,一個學生參加課程,但有些情況下,一個以上的學生可以分享課程(因此是多對多)。MVC 3多對多關係和ViewModels

所以我的視圖模型看起來有點像這樣:

public class ScheduleViewModel 
{ 
    public Lesson Lesson { get; set; } 
    public List<StudentViewModel> Students { get; set; } 
    public List<StudentViewModel> AllStudents { get; set; } 
} 

在查看我會用DisplayFor展現Lesson的細節結合Lesson性能。然後我會有一個DropDownListFor,它使用AllStudents作爲它的來源。當用戶從列表中選擇一個學生時,會生成第二個DropDown(等),允許添加更多的學生。這些選擇將被添加到我的ViewModel的Students屬性中。

在過去,我會處理這是JavaScript和管理通過JSON和AJAX更新。我的直覺是,我應該使用MVC模板,但在我的研究中,我沒有找到具有這種確切場景的示例(或者當然,我可能會吠叫錯誤的樹)。

我目前沒有我的View的代碼,因爲在這種情況下,我真的被困在正確的策略中。

我希望這是有道理的,任何幫助,非常感謝。

非常感謝 Simon。

+0

'StudentViewModel'裏面還有'Student'類嗎? – Lars

回答

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; } 
} 

Now課程和學生之間有多對多的關係。然後

您的視圖模型看起來更象這樣:

public class ScheduleViewModel 
{ 
    public Lesson Lesson { get; set; } 

    // All students property 
    public List<Student> Students { get; set; } 
} 

Lesson屬性現在包含所有關於你的教訓,其中包括學生連接到它,因爲它有學生名單的信息。您想要將所選學生從視圖中添加到此列表中。

Students屬性用於顯示數據庫中的所有學生。

+0

嗨拉斯..當然你是對的。由於我的模型是從數據庫生成的EF,學生確實包含與課程的關係,但是我的StudentViewModel只包含學生實體(而不是相關課程)的數據。當然ViewModel從我原來的問題做起,儘管是間接的。也許我沒有清楚地說明問題,但我的主要問題是將這些Student下拉菜單添加到UI中。我過去會通過jQuery和AJAX做到這一點,但我想知道在視圖中是否有MVC方式來做到這一點;客戶端將對象添加到ViewModel。 –