Bra*_*bby 13 asp.net asp.net-mvc defaultmodelbinder
我有一个表格,表格代表员工的时间表.顶部的天数,项目的侧面,每天/项目交叉点包含常规小时和加班的两个值.
页面模型的(简化)类定义是:
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;
}
Run Code Online (Sandbox Code Playgroud)
页面上的表单元素如下命名,试图让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.
Run Code Online (Sandbox Code Playgroud)
但是,提交视图时,model参数未完全填充.model.Projects包含项目,但Project的WorkUnits字段为空.DefaultModelBinder支持嵌套集合是否像我正在尝试的那样?如果没有,我该怎么办?
Bra*_*bby 13
我最终弄清楚为什么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; }
}
Run Code Online (Sandbox Code Playgroud)
(注意:原始问题中的源代码将Project.Name定义为一个字段,在我的实际代码中它是一个属性.这就是为什么项目列表已经填充,但WorkUnits不是.)
| 归档时间: |
|
| 查看次数: |
3771 次 |
| 最近记录: |