Cześć, w metodzie GET przekazuję do widoku "pusty model" dni tygodnia (zmiany w pracy danego pracownika). Niestety przy wysłaniu tych danych, do akcji kontrolera model jakby zgubił część z nich, dane pracownika (imię, nazwisko itp.) są przekazane poprawnie, natomiast lista zmian już idzie z nullem, czy mam coś błędnie zmapowane? Jak wystrzec się takich błędów?
Lista<shift> z widoku:
<table class="table">
<caption>Grafik pracownika</caption>
<thead>
<tr>
<th scope="col">Dzień tygodnia</th>
<th scope="col">Od godziny</th>
<th scope="col">Do godziny</th>
<th scope="col">Wolne</th>
</tr>
</thead>
<tbody>
@foreach (var shift in Model.Shifts)
{
<tr>
<td><label asp-for="@shift.DayOfWeek" />@shift.DayOfWeek</td>
<td><input id="@(shift.DayOfWeek + "dateFrom")" class="form-control" asp-for="@shift.DateFrom" type=time /></td>
<td><input id="@(shift.DayOfWeek+ "dateTo")" class="form-control" asp-for="@shift.DateTo" type=time /></td>
<td><input type="checkbox" class="form-check-input text-center" data-day="@shift.DayOfWeek" id="@(shift.DayOfWeek+"freeDayCheckbox")" onclick="changeEditable(this.getAttribute('data-day'))"></td>
</tr>
}
</tbody>
</table>
Akcja POST kontrolera:
[HttpPost]
public IActionResult AddWorker(WorkerModel model)
{
var workerModel = _workerService.AddWorker(model);
return RedirectToAction("EditWorkplace", "Workplace", new { Id = workerModel.WorkplaceId });
}
Model Pracownika
public class WorkerModel
{
public int Id { get; set; }
[Required]
[DisplayName("Imię")]
public string Name { get; set; }
[DisplayName("Nazwisko")]
public string LastName { get; set; }
[Display(Name = "Zdjęcie")]
public IFormFile Photo { get; set; }
public string PhotoFilePath { get; set; }
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int WorkplaceId { get; set; }
public List<ServiceModel> Services { get; set; }
public List<ShiftModel> Shifts { get; set; }
}
Model Zmiany
public class ShiftModel
{
public int Id { get; set; }
[DataType(DataType.Time)]
[DisplayFormat(DataFormatString = "{0:hh:mm}", ApplyFormatInEditMode = true)]
public DateTime DateFrom { get; set; }
[DataType(DataType.Time)]
[DisplayFormat(DataFormatString = "{0:hh:mm}", ApplyFormatInEditMode = true)]
public DateTime DateTo { get; set; }
public string DayOfWeek { get; set; }
public int WorkerId { get; set; }
public bool DayOff { get; set; }
}