【问题标题】:MVC3 View Model - List of Complex Objects, containing ListsMVC3 视图模型 - 复杂对象列表,包含列表
【发布时间】:2012-10-10 10:00:03
【问题描述】:

如何将如此复杂的模型与包含多个对象的多个层绑定? 现在我将模型传递给视图 - (填充表单/复选框树)并且我想要返回确切的模型(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)
    {

    }
}

Bin 类:

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

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

Foo 类:

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

【问题讨论】:

    标签: c# asp.net-mvc-3 model model-binding


    【解决方案1】:

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

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

    View.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 格式更改为您想要的任何内容,但本质上就是这样。

    【讨论】:

    • 很明显我放了个屁。像这样的嵌套东西更好的答案!
    • 哦,谢谢!我确实有这个,但我也有给我无限循环的主题参考。
    【解决方案2】:

    您需要对象的 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)
        }
    }
    

    ..等等

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

    【讨论】:

    • Bin 回溯主题呢?而你忘了在Model.Subjects.(here).Bins.Count 之后包含[subjectIndex]
    • @Nate - 你不会渲染 Bin 主题,否则它只会创建一个无限循环。 Subject渲染Bin,bin渲染subject,渲染bin,渲染subject..等等。
    • 在编辑器模板之前我有类似的东西 - 不过感谢您的帮助!
    猜你喜欢
    • 2012-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多