public async Task <IActionResult> ModifyTask(ChallengesDetailViewModel viewModel) { foreach (string key in ModelState.Keys.Where(m => m.StartsWith("Challenge.")).ToList()) { ModelState.Remove(key); } if (ModelState.IsValid) { if (viewModel.Task.ChallengeTaskType == ChallengeTaskType.Action) { viewModel.Task.Author = null; viewModel.Task.Isbn = null; viewModel.Task.Url = null; } await _challengeService.EditTaskAsync(viewModel.Task); } else { TempData[EditTask] = viewModel.Task.Id; } TempData[TempEditChallenge] = Newtonsoft.Json.JsonConvert .SerializeObject(viewModel.Challenge); return(RedirectToAction("Edit", new { id = viewModel.Challenge.Id })); }
public async Task <IActionResult> ModifyTask(ChallengesDetailViewModel viewModel) { if (!string.IsNullOrWhiteSpace(viewModel.Task.Url)) { try { viewModel.Task.Url = new UriBuilder( viewModel.Task.Url).Uri.AbsoluteUri; } catch (Exception) { ShowAlertDanger("Invalid URL"); return(RedirectToAction("Edit", new { id = viewModel.Challenge.Id })); } } foreach (string key in ModelState .Keys .Where(m => m.StartsWith("Challenge.", StringComparison.OrdinalIgnoreCase)) .ToList()) { ModelState.Remove(key); } if (viewModel.TaskUploadFile != null && !ValidUploadExtensions.Contains(Path .GetExtension(viewModel.TaskUploadFile.FileName) .ToLowerInvariant())) { ModelState.AddModelError("BadgeUploadImage", $"File upload must be one of the following types: {string.Join(", ", ValidUploadExtensions)}"); } if (ModelState.IsValid) { byte[] fileBytes = null; if (viewModel.Task.ChallengeTaskType == ChallengeTaskType.Action) { viewModel.Task.Author = null; viewModel.Task.Isbn = null; } if (viewModel.TaskUploadFile != null) { viewModel.Task.Filename = viewModel.TaskUploadFile.FileName; using (var fileStream = viewModel.TaskUploadFile.OpenReadStream()) { using (var ms = new MemoryStream()) { fileStream.CopyTo(ms); fileBytes = ms.ToArray(); } } } await _challengeService.EditTaskAsync(viewModel.Task, fileBytes); } else { TempData[EditTask] = viewModel.Task.Id; } TempData[TempEditChallenge] = Newtonsoft.Json.JsonConvert .SerializeObject(viewModel.Challenge); return(RedirectToAction("Edit", new { id = viewModel.Challenge.Id })); }