public async Task <IActionResult> Create(CreateViewModel model) { var serverValidation = new ServerValidation(_quizRepository); if (ModelState.IsValid) { var quiz = new Quiz { Title = model.Title, Questions = model.Questions }; // A second validation on top of the client-side validation // It makes sure the inputs the client-side validation covers are correct // and performs other validation that is not executed in the client-side var isModelValidInServer = serverValidation.IsModelValidInServer(quiz, ModelState); if (isModelValidInServer) { _quizRepository.Save(quiz); await _context.SaveChangesAsync(); // Passing which page the user comes from // It is to difference the message coming from the Edit page TempData["create"] = "Create"; return(RedirectToAction("Details", new { id = quiz.QuizId })); } return(View(model)); } return(View(model)); }
public async Task <IActionResult> Edit(int id, Quiz quiz) { var serverValidation = new ServerValidation(_quizRepository); if (id != quiz.QuizId) { return(NotFound()); } if (!_quizRepository.QuizExists(quiz.QuizId)) { return(NotFound($"The Quiz with id - {quiz.QuizId} does not exist in the system.")); } if (ModelState.IsValid) { var isModelValidInServer = serverValidation.IsModelValidInServer(quiz, ModelState); if (isModelValidInServer) { foreach (var question in quiz.Questions) { foreach (var answer in question.Answers) { _context.Entry(answer).State = EntityState.Modified; _answerRepository.Edit(answer); } _context.Entry(question).State = EntityState.Modified; _questionRepository.Edit(question); } _context.Entry(quiz).State = EntityState.Modified; _quizRepository.Edit(quiz); await _context.SaveChangesAsync(); TempData["edit"] = "Edit"; return(RedirectToAction("Details", new { id = quiz.QuizId })); } return(View(quiz)); } return(View(quiz)); }