与此帖IEnumerable model property in an ASP.NET MVC 3 Editor Template类似,我有
模型
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);
}
语句@ Html.EditorFor中的错误(m =&gt; m.Classes);是..
模型项传入字典的类型 'System.Collections.Generic.HashSet`1 [Class]',但是这本字典 需要一个'Class'类型的模型项。
基本上,我想要实现的是显示所有可用类的列表,旁边有一个复选框(我尚未达到该部分代码)。然后检查注册学生的所有课程,并允许更改选择。
请建议。感谢。
答案 0 :(得分: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方法中,我可以获得类的数组(复选框的名称)。