سؤال

ولدي عرض مع جدول زمني يمثل الموظف. أيام في أعلى، مشاريع أسفل الجانب، مع كل تقاطع اليوم / مشروع يحتوي على قيمتين لساعات منتظمة والعمل الإضافي.

وو(المبسطة) تعريفات فئة لنموذج الصفحة هي:

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 لا.)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top