ASP.NET MVC DefaultModelBinder与嵌套列表(ASP.NET MVC De

2019-07-28 20:17发布

我有一个代表雇员的工时表视图。 跨顶天,向下突出的一侧,包含定期时间和加班时间两个值的每一天/项目交集。

该页面模型(简体)类定义是:

public class TimesheetFormModel {
    public List<Project> Projects;
    // other things...
}
public class Project {
    public string Name;
    public List<WorkUnit> WorkUnits;
}
public class WorkUnit {
    public DateTime Date;
    public decimal RegularHours;
    public decimal OvertimeHours;
}

页面上的表单元素被命名为试图获得DefaultModelBinder拿起他们如下。

model.Projects[0].Name // "New Project"
model.Projects[0].WorkUnits[0].Date // "5/23/2009 12:00:00 AM"
model.Projects[0].WorkUnits[0].RegularHours // 0
model.Projects[0].WorkUnits[0].OvertimeHours // 0

model.Projects[0].WorkUnits[1].Date // "5/24/2009 12:00:00 AM"
model.Projects[0].WorkUnits[1].RegularHours // 0
model.Projects[0].WorkUnits[1].OvertimeHours // 0

model.Projects[0].WorkUnits[2].Date // "5/25/2009 12:00:00 AM"
model.Projects[0].WorkUnits[2].RegularHours // 0
model.Projects[0].WorkUnits[2].OvertimeHours // 0

// etc.

当视图但是提交后, model参数没有被完全填充。 model.Projects包含的项目,但ProjectWorkUnits字段为空。 是否DefaultModelBinder支持嵌套集合像我想干什么? 如果不是这样,我该怎么办?

Answer 1:

我终于想通了,为什么DefaultModelBinder不上的属性拿起WorkUnit :因为他们没有 ,他们是 。 DefaultModelBinder只适用于性能。 更改的类定义WorkUnitProject使用了一切领域点击:

public class Project {
    public IList<WorkUnit> WorkUnits { get; set; }
    public string Name { get; set; }
}

public class WorkUnit {
    public DateTime Date { get; set; }
    public decimal RegularHours { get; set; }
    public decimal OvertimeHours { get; set; }
}

(注:原题的源代码已经Project.Name定义为字段,在我的实际代码,这是一个属性这是为什么项目名单得到填充,但任务包是不是。)



文章来源: ASP.NET MVC DefaultModelBinder with nested lists