Frage

Ich habe eine Ansicht mit einem Tisch eines Mitarbeiters Zeiterfassungs darstellt. Tage über die Spitze ragt nach unten auf der Seite, mit jeder Tag / Projekt Kreuzung mit zwei Werten für die regelmäßigen und Überstunden.

Die (vereinfachte) Klassendefinitionen für die Seite Modell sind:

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;
}

Die Formularelemente auf der Seite genannt werden, wie in einem Versuch, folgt ihnen den Default abholen zu erhalten.

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.

Wenn die Ansicht jedoch vorgelegt wird, wird der model Parameter nicht vollständig aufgefüllt wird. model.Projects enthält Projekte, aber die Project Feld des WorkUnits ist leer. Ist die DefaultModelBinder Unterstützung Sammlungen verschachtelt, wie ich zu tun bin versucht? Wenn nicht, was soll ich tun?

War es hilfreich?

Lösung

ich schließlich herausgefunden, warum DefaultModelBinder nicht wurde auf die Eigenschaften von WorkUnit Aufnehmen: Weil sie nicht waren Eigenschaften , waren sie Felder . DefaultModelBinder funktioniert nur mit Eigenschaften. Ändern der Klassendefinition von WorkUnit und Project verwenden Feldern alles klicken:

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; }
}

(Hinweis:. Der Quellcode in der ursprünglichen Frage war Project.Name als Feld definiert ist, in meinem eigentlichen Code war es eine Eigenschaft dieses Grund hat die Projektliste wurde bevölkert zu werden, aber WUs war es nicht.)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top