// GET: QuizAnswers public ActionResult Index(int sessionId, int questionId = 0, int direction = 1) { AskQuizQuestionViewModel newQuestion = new AskQuizQuestionViewModel(); if (questionId == 0) { newQuestion = GetFirstUnansweredQuestion(sessionId); } else { newQuestion = GetNextQuestion(sessionId, questionId, direction); } //use newQuestion to populate view for display. //ERROR Something about coming through here the second time is causing a context error with QuizQuestion. db.Entry(newQuestion.Question).Collection(q => q.Choices).Load(); EditQuizAnswerViewModel view = new EditQuizAnswerViewModel() { SessionId = sessionId, QuestionId = newQuestion.Question.ID, CurrentQuestionNum = newQuestion.CurrentQuestionNum, TotalQuestions = quizQuestions.Count(), QuestionText = newQuestion.Question.Text, }; //Now see if the user has already supplied an answer. string userId = User.Identity.GetUserId(); QuizAnswer quizAnswer = db.QuizAnswers.SingleOrDefault(ans => ans.QuestionID == view.QuestionId && ans.AnswererID == userId); if (quizAnswer != null) { view.StudentAnswer = quizAnswer.Text; } //Using the stripped down QuizChoiceViewModel to remove the "IsCorrect" flag from the data //sent to the viewe page. ICollection <QuizChoiceViewModel> quizChoices = new List <QuizChoiceViewModel>(); foreach (var choice in newQuestion.Question.Choices) { QuizChoiceViewModel newChoice = new QuizChoiceViewModel() { ID = choice.ID, Text = choice.Text }; quizChoices.Add(newChoice); } view.QuestionChoices = quizChoices; return(View(view)); }
public ActionResult Index(string submitButton, EditQuizAnswerViewModel view) { if (ModelState.IsValid && view.StudentAnswer != null) { //Need to check for an existing answer first. If it exists, we update instead of add. string userId = User.Identity.GetUserId(); QuizAnswer quizAnswer = db.QuizAnswers.SingleOrDefault(ans => ans.QuestionID == view.QuestionId && ans.AnswererID == userId); if (quizAnswer == null) { quizAnswer = new QuizAnswer() { SessionID = view.SessionId, QuestionID = view.QuestionId, Text = view.StudentAnswer, AnswererID = User.Identity.GetUserId(), IsCorrect = false }; db.QuizAnswers.Add(quizAnswer); } else { //No need to update if there is no change. if (quizAnswer.Text != view.StudentAnswer) { quizAnswer.Text = view.StudentAnswer; db.Entry(quizAnswer).State = EntityState.Modified; } } db.SaveChanges(); } switch (submitButton) { case "Next": return(RedirectToAction("Index", new { sessionId = view.SessionId, questionId = view.QuestionId, direction = 1 })); case "Prev": return(RedirectToAction("Index", new { sessionId = view.SessionId, questionId = view.QuestionId, direction = -1 })); case "Finish": return(RedirectToAction("Index", "Questions", new { sessionId = view.SessionId })); default: goto case "Next"; } }