public async Task <IActionResult> Create(int id, RankingViewModel vm) { //removing userid from state to make modelstate valid ModelState.Remove("Rank.UserId"); if (ModelState.IsValid) { //setting user and user id to current user var user = await GetCurrentUserAsync(); vm.rank.UserId = user.Id; // a new ranking level instance in view model vm.rankingLevel = new RankingLevel(); _context.Add(vm.rank); await _context.SaveChangesAsync(); //if the user selected one or more levels for learning materials add one or more ranking levels to database join table if (vm.SelectedLevelId != null) { foreach (var rl in vm.SelectedLevelId) { var newRankingLevel = new RankingLevel(); newRankingLevel.RankingId = vm.rank.Id; newRankingLevel.LevelId = rl; _context.Add(newRankingLevel); } } await _context.SaveChangesAsync(); return(RedirectToAction("Index", "LearningMaterials")); } return(View(vm)); }
public async Task <IActionResult> Edit(int id, RankingViewModel vm) { //makes sure that the rank exists if (id != vm.rank.Id) { return(NotFound()); } ModelState.Remove("UserId"); if (ModelState.IsValid) { try { var user = await GetCurrentUserAsync(); vm.rank.UserId = user.Id; _context.Update(vm.rank); await _context.SaveChangesAsync(); if (vm.SelectedLevelId != null) { foreach (var rl in vm.SelectedLevelId) { var newRankingLevel = new RankingLevel(); newRankingLevel.RankingId = vm.rank.Id; newRankingLevel.LevelId = rl; _context.Update(newRankingLevel); } } await _context.SaveChangesAsync(); } catch (DbUpdateConcurrencyException) { if (!RankingExists(vm.rank.Id)) { return(NotFound()); } else { throw; } } return(RedirectToAction("Index", "LearningMaterials")); } return(View(vm)); }