0

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

谁能详细说明我需要采取的过程才能在我看来正确绑定这些?

查看型号:

public class SubjectSelectionModel
{
    public IList<Subject> Subjects { get; set; }
}

学科类:

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

    public Subject()
    {

    }

    public Subject(IList<Course> courses)
    {

    }
}

斌类:

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

    public IList<Foo> Foos { get; set; }
}

福类:

public class Foo
{
    public int Number { get; set; }
}
4

2 回答 2

5

这是编辑器模板派上用场的地方。您可以使用简单的编辑器模板来为您处理所有繁重的工作,而不是搞砸这个。

您将在 ~/Views/Shared/EditorTemplates 中创建几个模板,然后在您的主视图中它应该如下所示:

查看.cshtml

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

主题.cshtml

@model Subject
@Html.EditorFor(m => m.Name)
@Html.EditorFor(m => m.Bins)

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

@model Bin
@Html.EditorFor(m => m.Amount)
@Html.EditorFor(m => m.Foos)

Foo.cshtml

@model Foo
@Html.EditorFor(m => m.Number)

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

于 2012-10-10T02:00:03.017 回答
1

您需要对象的 for 循环,以便 MVC 可以使用集合中的索引进行绑定。

例子:

for (int subjectIndex = 0; subjectIndex < Model.Subjects.Count; subjectIndex++) {
    @Html.TextBoxFor(x => x.Subjects[subjectIndex].Name)

    for (int binIndex = 0; binIndex < Model.Subjects.Bins.Count; binIndex++) {
        @Html.TextBoxFor(x => x.Subjects[subjectIndex].Bins[binIndex].Amount)
    }
}

..ETC。

我在这里对类似问题给出了类似的回答:Generating an MVC RadioButton list in a loop

于 2012-10-10T01:48:45.383 回答