Любой код нуждается в комментариях, я пытаюсь объяснить причину и работу каждой функции, которую я пишу, в 1 или 2 строки.
Код, который объясняет себя, существует только в идеальном мире, всегда есть какой-то странный взлом или причина сделать что-то быстрое, а не грязное. Лучше всего помнить, комментировать, ПОЧЕМУ код делает то, что делает, хороший код объясняет ЧТО он делает в 99% случаев.
Напишите что-нибудь простое, например, фрагмент кода, который может решить головоломку Судоку (3 достаточно простых цикла while), и попробуйте прочитать это 3 месяца спустя. Вы обязательно найдете что-то не совсем понятное.
В конце концов я понял, почему 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, определенный как поле, в мой код - это свойство. Вот почему список проектов заполнялся, а рабочие единицы - нет.)