ASP.NET MVC DefaultModelBinder مع القوائم المتداخلة
-
05-07-2019 - |
سؤال
ولدي عرض مع جدول زمني يمثل الموظف. أيام في أعلى، مشاريع أسفل الجانب، مع كل تقاطع اليوم / مشروع يحتوي على قيمتين لساعات منتظمة والعمل الإضافي.
وو(المبسطة) تعريفات فئة لنموذج الصفحة هي:
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 تعريف كحقل في قانون بلدي الفعلي كان خاصية هذا هو السبب في الحصول على تعبئة قائمة المشاريع ولكن WorkUnits لا.)