带有嵌套列表的 ASP.NET MVC DefaultModelBinder

标签 asp.net asp.net-mvc defaultmodelbinder

我有一个带有代表员工时间表的表格的 View 。顶部的天数,向下的项目,每个天/项目交叉点包含两个值,用于正常工作时间和加类时间。

页面模型的(简化的)类定义是:

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.

然而,当提交 View 时,model参数未完全填充。 model.Projects包含项目,但 ProjectWorkUnits字段为空。是否DefaultModelBinder支持嵌套集合,就像我想要做的那样?如果没有,我该怎么办?

最佳答案

我终于知道为什么 DefaultModelBinder没有注意到 WorkUnit 的属性: 因为它们不是属性,它们是字段。 DefaultModelBinder仅适用于属性。更改 WorkUnit 的类定义和 Project使用字段使一切都点击:

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 定义为一个字段,在我的实际代码中它是一个属性。这就是为什么 Projects 列表被填充而 WorkUnits 没有被填充。)

关于带有嵌套列表的 ASP.NET MVC DefaultModelBinder,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1004160/

相关文章:

c# - ASP.NET MVC 默认绑定(bind)器 : too long ints, 空验证错误消息

c# - Asp.net MVC 模型绑定(bind)派生类

asp.net-mvc - 带有表单和列表的 MVC 3 : default model binder and EditorFor

asp.net - ASP站点可与Win7 IE 11一起使用,但不能与Win10 IE11一起使用

javascript - jsTree 无法正确渲染列表?

jquery - 使用Jquery的MVC4 Ajax调用,应该是Post还是Get?

asp.net-mvc - AccountController.SendCode 和VerifyCode 的作用是什么?

asp.net - 有没有针对Visual Studio 2013的解决方案,不能为ASPX页面正确生成.designer文件?

c# - 将复杂类型作为参数传递给 ASMX 服务

asp.net - @RenderBody() 该怎么办?