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; }頁面上的表單元素命名如下,以嘗試讓 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包含項目,但Project’WorkUnits欄位為空。是否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 沒有填充的原因。)