У меня есть эти модели представления для сотрудников и их ролей:
public class EmployeeViewModel
{
public int Id { get; set; }
// some more properties
public List<EmployeeRoleViewModel> EmployeeRoles { get; set; }
}
public class EmployeeRoleViewModel
{
public int Id { get; set; }
public int EmployeeId { get; set; }
public int RoleId { get; set; }
public string Title { get; set; }
public bool Selected { get; set; }
}
Я отображаю флажки, подобные этому, в представлении редактирования:
@for (int i = 0; i < Model.EmployeeRoles.Count(); i++)
{
<label>
<input type="checkbox" asp-for="@Model.EmployeeRoles[i].Selected" />
@Model.EmployeeRoles[i].Title
</label>
}
Это генерирует этот HTML дляфлажок:
<input type="checkbox" checked="checked"
id="EmployeeRoles_0__Selected"
name="EmployeeRoles[0].Selected" value="true" />
... и это для непроверенного:
<input type="checkbox"
id="EmployeeRoles_2__Selected"
name="EmployeeRoles[2].Selected" value="true" />
Все флажки отображаются правильно, с флажками на всех правильных полях.
Форма размещена в этом методе контроллера (упрощенно для краткости):
[HttpPost]
public async Task<IActionResult> Edit(int id,[Bind("Id,EmployeeRoles")] Employee employee)
{
db.Update(employee);
await db.SaveChangesAsync();
return RedirectToAction("Details", "Branches");
}
Проблема в том, что employee.EmployeeRoles
- это список длины 0, даже если установлены несколько флажков.Что я делаю не так?