MVC3视图模型 - 包含列表的复杂对象列表

Nat*_*ins 0 c# model model-binding asp.net-mvc-3

如何将这种复杂模型与包含多个对象的多个图层绑定?现在我将模型传递给视图 - (填充表单/复选框树),我想要准确的模型(SubjectSelectionModel),但它没有正确绑定.

任何人都可以详细说明我需要采取的过程,以便在我看来正确绑定这些过程吗?

查看型号:

public class SubjectSelectionModel
{
    public IList<Subject> Subjects { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

学科分类:

public class Subject
{
    public String Name { get; set; }
    public IList<Bin> Bins { get; set; }

    public Subject()
    {

    }

    public Subject(IList<Course> courses)
    {

    }
}
Run Code Online (Sandbox Code Playgroud)

Bin类:

public class Bin 
{
    public Subject Subject { get; set; }
    public int Amount { get; set; }

    public IList<Foo> Foos { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

Foo类:

public class Foo
{
    public int Number { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

Eri*_*sch 5

这是编辑器模板派上用场的地方.您可以使用简单的编辑器模板来处理所有繁琐的工作,而不是搞乱这一点.

您可以在〜/ Views/Shared/EditorTemplates中创建几个模板,然后在主视图中它应如下所示:

View.cshtml

@model SubjectSelectionModel
@using(Html.BeginForm()) {
    @EditorFor(m => m.Subjects)
    <input type="submit" />
}
Run Code Online (Sandbox Code Playgroud)

Subject.cshtml

@model Subject
@Html.EditorFor(m => m.Name)
@Html.EditorFor(m => m.Bins)
Run Code Online (Sandbox Code Playgroud)

Bin.cshtml(我假设你不想渲染主题,这将是一个无限循环)

@model Bin
@Html.EditorFor(m => m.Amount)
@Html.EditorFor(m => m.Foos)
Run Code Online (Sandbox Code Playgroud)

Foo.cshtml

@model Foo
@Html.EditorFor(m => m.Number)
Run Code Online (Sandbox Code Playgroud)

显然,您可能希望将html格式更改为您想要的任何内容,但实质上就是这样.