2012-01-25 83 views
1

這個帖子IEnumerable model property in an ASP.NET MVC 3 Editor Template,我也有類似的IEnumerable的財產與MVC3 EditorTemplate

型號

public class Student 
{ 
    public int StudentId { get; set; } 
    public string StudentName{ get; set; } 

    //FYI..Its virtual because of EF relationship 
    public virtual ICollection<Class> Classes{ get; set; } 
} 
public class Class 
{ 
    public int ClassId { get; set; } 
    public string ClassName{ get; set; }  
} 

視圖 - EditStudent

@model Student 

@Html.TextBoxFor(m => m.StudentName) 

//I get the error for following..see below 
@Html.EditorFor(m => m.Classes); 

學生/ EditorTemplates /類

@model Class 

<div> 
    @*checkbox here*@ 
    @Html.LabelFor(x => x.ClassName) 
</div> 

控制器

public ActionResult EditStudent(int id) 
{ 
    ViewBag.Classes = repository.GetClasses(); 
    Student student = repository.GetStudent(id); 

    return View("EditStudent", student); 
} 
  1. 錯誤觀語句@ Html.EditorFor(M => m.Classes);是...

    模型項傳入字典的類型爲 'System.Collections.Generic.HashSet`1 [Class]',但該字典 需要一個'Class'類型的模型項。

  2. 基本上,我試圖實現的是顯示所有類旁邊的複選框可用的列表(我還沒有達到那部分代碼)。然後檢查學生的所有課程是否已註冊並允許更改選擇。

    • 如何顯示給定型號的複選框列表。
    • 我應該將EditorTemplate綁定到ViewBag.Classes(How?)還是?
    • 我需要在Post ActionMethod中獲取選中的複選框值。
    • 我看了一些建議那些建議創建CheckBoxListHelper,但應該可以使用EditorTemplate,因爲我需要顯示一個簡單的列表。

請建議。謝謝。

回答

1

好吧,我想通了。由於非常精確的帖子在這裏

How to provide an EditorTemplate for IEnumerable<MyModel>?

首先,我改名爲EditorTemplate到StudentClass - 不知道這有什麼結合或沒有,但我做到了。

其次,修改EditorTemplate與IEnumerable的

@model IEnumerable<Class> 
var checked = ""; 
@foreach (Class class in ViewBag.Classes) 
{ 
    if (Model != null) 
    { 
     Class class = Model.FirstOrDefault(c => c.ClassId.Equals(class.ClassId)); 
     if (class != null) 
     { 
      checked = "checked=checked"; 
     } 
    } 
    <input type="checkbox" name="Classes" value="@class.ClassId" @checked /> 
    @class.ClassName 
} 

結合我呼籲用的模板名稱

@Html.EditorFor(m => m.Classes, "StudentClass"); 

現在,在控制器的Post方法我可以得到類的陣列(複選框的名稱) 。