1

与这篇文章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);

学生/编辑模板/班级

@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 绑定(如何?)还是?
    • 我还需要在 Post ActionMethod 中获取选定的复选框值。
    • 我阅读了一些建议创建 CheckBoxListHelper 的帖子,但应该可以使用 EditorTemplate,因为我需要显示一个简单的列表。

请建议。谢谢。

4

1 回答 1

1

好吧,我想通了。感谢这里非常精确的帖子

如何为 IEnumerable<MyModel> 提供 EditorTemplate?

首先,我将 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 方法中,我可以获得类数组(复选框的名称)。

于 2012-01-31T19:29:14.260 回答