public async Task <IActionResult> Edit(int?id) { if (id == null) { return(NotFound()); } var course = _context.Course.Where(c => c.Id == id).Include(c => c.Students).ThenInclude(c => c.Student).First(); if (course == null) { return(NotFound()); } CoursesStudentsEditClass viewmodel = new CoursesStudentsEditClass { Course = course, StudentList = new MultiSelectList(_context.Student.OrderBy(s => s.FirstName), "Id", "FirstName"), SelectedStudents = course.Students.Select(s => s.StudentId) }; ViewData["FirstTeacherId"] = new SelectList(_context.Set <Teacher>(), "Id", "FirstName", course.FirstTeacherId); ViewData["SecondTeacherId"] = new SelectList(_context.Set <Teacher>(), "Id", "FirstName", course.SecondTeacherId); return(View(viewmodel)); }
public async Task <IActionResult> Edit(int id, CoursesStudentsEditClass viewmodel) { if (id != viewmodel.Course.Id) { return(NotFound()); } if (ModelState.IsValid) { try { await _context.SaveChangesAsync(); IEnumerable <int> listStudents = viewmodel.SelectedStudents; IQueryable <Enrollment> toBeRemoved = _context.Enrollment.Where(s => !listStudents.Contains(s.StudentId) && s.CourseId == id); _context.Enrollment.RemoveRange(toBeRemoved); IEnumerable <int> existStudents = _context.Enrollment.Where(s => listStudents.Contains(s.StudentId) && s.CourseId == id) .Select(s => s.StudentId); IEnumerable <int> newStudents = listStudents.Where(s => !existStudents.Contains(s)); foreach (int studentId in newStudents) { _context.Enrollment.Add(new Enrollment { StudentId = studentId, CourseId = id }); } _context.Update(viewmodel.Course); await _context.SaveChangesAsync(); } catch (DbUpdateConcurrencyException) { if (!CourseExists(viewmodel.Course.Id)) { return(NotFound()); } else { throw; } } return(RedirectToAction(nameof(Index))); } ViewData["FirstTeacherId"] = new SelectList(_context.Set <Teacher>(), "Id", "FirstName", viewmodel.Course.FirstTeacherId); ViewData["SecondTeacherId"] = new SelectList(_context.Set <Teacher>(), "Id", "FirstName", viewmodel.Course.SecondTeacherId); return(View(viewmodel)); }
public async Task <IActionResult> PutCourse(int id, CoursesStudentsEditClass viewmodel) { if (id != viewmodel.Course.Id) { return(BadRequest()); } _context.Entry(viewmodel.Course).State = EntityState.Modified; try { await _context.SaveChangesAsync(); IEnumerable <int> listStudents = viewmodel.SelectedStudents; IQueryable <Enrollment> toBeRemoved = _context.Enrollment.Where(s => !listStudents.Contains(s.StudentId) && s.CourseId == id); _context.Enrollment.RemoveRange(toBeRemoved); IEnumerable <int> existStudents = _context.Enrollment.Where(s => listStudents.Contains(s.StudentId) && s.CourseId == id) .Select(s => s.StudentId); IEnumerable <int> newStudents = listStudents.Where(s => !existStudents.Contains(s)); foreach (int studentId in newStudents) { _context.Enrollment.Add(new Enrollment { StudentId = studentId, CourseId = id }); } _context.Update(viewmodel.Course); await _context.SaveChangesAsync(); } catch (DbUpdateConcurrencyException) { if (!CourseExists(id)) { return(NotFound()); } else { throw; } } return(NoContent()); }