// GET: Rankings/Create public async Task <IActionResult> Create(int id) { CreateRankingViewModel vm = new CreateRankingViewModel(); // Add the student's id to the view model vm.Student = await _context.Student.Where(s => s.Id == id).FirstOrDefaultAsync(); vm.Companies = await _context.Company.Select(c => new SelectListItem() { Value = c.Id.ToString(), Text = c.Name }).ToListAsync(); return(View(vm)); }
public async Task <IActionResult> Create(CreateRankingViewModel vm) { if (ModelState.IsValid) { try { // Wipe out previous rankings and start fresh so that each student has only one set of rankings var previousRankings = _context.Ranking.Where(r => r.StudentId == vm.Student.Id); await previousRankings.ForEachAsync(pr => _context.Remove(pr)); await _context.SaveChangesAsync(); List <Ranking> Rankings = new List <Ranking>() { vm.Place1, vm.Place2, vm.Place3, vm.Place4, vm.Place5 }; for (var i = 0; i < Rankings.Count; i++) { // TODO: Refactor, this is fragile var r = Rankings[i]; r.Rank = i + 1; r.StudentId = vm.Student.Id; _context.Ranking.Add(r); } await _context.SaveChangesAsync(); return(RedirectToAction("Index", "Students")); } catch (Exception e) { return(View(vm)); }; } else { return(View(vm)); } }