// 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";
            }
        }