public async Task <IActionResult> Edit(int id, ProgramClientVM viewmodel) { if (id != viewmodel.Program.Id) { return(NotFound()); } if (ModelState.IsValid) { try { _context.Update(viewmodel.Program); await _context.SaveChangesAsync(); IEnumerable <int> listClients = viewmodel.SelectedClients; IQueryable <ClientProgram> toBeRemoved = _context.ClientProgram.Where(s => !listClients.Contains(s.ClientId) && s.ProgramId == id); _context.ClientProgram.RemoveRange(toBeRemoved); IEnumerable <int> existClients = _context.ClientProgram.Where(s => listClients.Contains(s.ClientId) && s.ProgramId == id).Select(s => s.ClientId); IEnumerable <int> newClients = listClients.Where(s => !existClients.Contains(s)); foreach (int actorId in newClients) { _context.ClientProgram.Add(new ClientProgram { ClientId = actorId, ProgramId = id }); } await _context.SaveChangesAsync(); } catch (DbUpdateConcurrencyException) { if (!ProgramsExists(viewmodel.Program.Id)) { return(NotFound()); } else { throw; } } return(RedirectToAction(nameof(Index))); } ViewData["CoachId"] = new SelectList(_context.Coaches, "CoachId", "FullName", viewmodel.Program.Id); return(View(viewmodel)); }
// GET: Programs/Edit/5 public IActionResult Edit(int?id) { if (id == null) { return(NotFound()); } var programs = _context.Programs.Where(m => m.Id == id).Include(m => m.Enrollments).First(); if (programs == null) { return(NotFound()); } ProgramClientVM viewmodel = new ProgramClientVM { Program = programs, ClientsList = new MultiSelectList(_context.Clients.OrderBy(s => s.FullName), "Id", "FullName"), SelectedClients = programs.Enrollments.Select(sa => sa.Id) }; ViewData["CoachId"] = new SelectList(_context.Coaches, "CoachId", "FullName", programs.CoachId); return(View(viewmodel)); }