public async Task <IActionResult> Attempt(int?id) { if (id == null) { NotFound(); } var viewModel = new ExamAttemptViewModel { Exam = await _context.Exams.Include(e => e.Questions).ThenInclude(q => q.Question).ThenInclude(q => q.Answers).FirstOrDefaultAsync(e => e.ExamId == id), ExamId = (int)id, User = await _userManager.FindByIdAsync(_userManager.GetUserId(User)), UserId = _userManager.GetUserId(User), ParticipationDate = DateTime.Now }; var questions = new List <ExamQuestionViewModel>(); foreach (ExamQuestion question in viewModel.Exam.Questions) { var questionVM = new ExamQuestionViewModel { QuestionId = question.Question.QuestionId, Text = question.Question.Text, QuestionType = question.Question.QuestionType }; var answers = new List <ExamAnswerViewModel>(); foreach (Answer answer in question.Question.Answers) { var answerVM = new ExamAnswerViewModel { Text = answer.Text, AnswerId = answer.AnswerId }; answers.Add(answerVM); } questionVM.Answers = answers; questions.Add(questionVM); } viewModel.Questions = questions; if (viewModel == null) { return(NotFound()); } return(View(viewModel)); }
//Add a StudentExamAnswer public IActionResult Answer(int id) { try { int?studentExamId = (int)TempData["studentExamId"]; StudentExam studentExam = _studentExamManager.Get(studentExamId); Question question = studentExam.Exam.ExamQuestions.ElementAt(id - 1); ExamQuestionViewModel examQuestionViewModel = NewExamQuestionViewModel(studentExam, question, id); //Checking which type of question it is if (question is QuestionOpen) { examQuestionViewModel.QuestionOpen = _questionManager.GetOpen(question.Id); StudentExamAnswerOpen studentExamAnswerOpen = _studentExamAnswerManager.GetByStudentExamAndQuestionOpen(studentExam.Id, question.Id); if (studentExamAnswerOpen != null) { examQuestionViewModel.Answer = studentExamAnswerOpen.Answer; } } else if (question is QuestionMultipleChoice) { examQuestionViewModel.QuestionMultipleChoice = _questionManager.GetMultipleChoice(question.Id); StudentExamAnswerMultipleChoice studentExamAnswer = _studentExamAnswerManager.GetByStudentExamAndQuestionMultiple(studentExam.Id, question.Id); if (studentExamAnswer != null) { List <int> answers = new List <int>(); answers.Add(studentExamAnswer.Answer.Id); examQuestionViewModel.Answers = answers; } } else { return(NotFound()); } TempData["studentExamId"] = studentExam.Id; return(View(examQuestionViewModel)); } catch (Exception) { return(NotFound()); } }
/// <summary> /// Add Questions for Exam. We are adding questions for each exam /// </summary> /// <param name="id"></param> /// <returns></returns> // GET: Admin/ExamQuestions/AddQuestions/5 public async Task <ActionResult> AddQuestions(int?id) { if (id == null) { return(new HttpStatusCodeResult(HttpStatusCode.BadRequest)); } var exam = await _examservice.GetByIdAsync(Convert.ToInt32(id)); if (exam == null) { return(RedirectToRoute(new { controller = "Exams", action = "Index", area = "Admin" })); } ExamQuestionViewModel examQuestionViewModel = new ExamQuestionViewModel(); examQuestionViewModel.ExamId = exam.Id; examQuestionViewModel.ExamName = exam.Name; return(View(examQuestionViewModel)); }
// GET: ExamQuestions // Listing all the Questions related to a studentExam and providing the possibility to answer public IActionResult Index(int?pageNumber) { try { int?studentExamId = (int)TempData["studentExamId"]; StudentExam studentExam = _studentExamManager.Get(studentExamId); List <ExamQuestionViewModel> examQuestionViewModels = new List <ExamQuestionViewModel>(); int i = 0; foreach (Question q in studentExam.Exam.ExamQuestions) { i++; ExamQuestionViewModel examQuestionViewModel = NewExamQuestionViewModel(studentExam, q, i); foreach (StudentExamAnswer a in examQuestionViewModel.StudentExam.StudentExamAnswers) { //Setting Question answered true if has exists if (a.Question.Id == q.Id) { examQuestionViewModel.Answered = true; break; } else { examQuestionViewModel.Answered = false; } } examQuestionViewModels.Add(examQuestionViewModel); } TempData["studentExamId"] = studentExam.Id; int pageSize = 8; return(View(PaginatedList <ExamQuestionViewModel> .Create(examQuestionViewModels, pageNumber ?? 1, pageSize))); } catch (Exception) { return(NotFound()); } }
public ActionResult Details(int id) { if (id == 0) { return(HttpNotFound()); } Question question = _questionService.Get(id); if (question == null) { return(HttpNotFound()); } var viewModel = new ExamQuestionViewModel() { Question = question }; return(View("Details", viewModel)); }
public IActionResult Answer(int id, string submit, [Bind("Question,Answer,Answers")] ExamQuestionViewModel examQuestionViewModel) { try { int studentExamId = (int)TempData["studentExamId"]; StudentExam studentExam = _studentExamManager.Get(studentExamId); Question question = studentExam.Exam.ExamQuestions.ElementAt(id - 1); //Checking which type of question it is if (question is QuestionOpen) { StudentExamAnswerOpen so = _studentExamAnswerManager.GetByStudentExamAndQuestionOpen(studentExamId, question.Id); StudentExamAnswerOpen studentExamAnswerOpen = new StudentExamAnswerOpen( _questionManager.GetOpen(question.Id), studentExam, examQuestionViewModel.Answer ); if (so == null) { _studentExamAnswerManager.Add(studentExamAnswerOpen); } else { _studentExamAnswerManager.UpdateOpen(studentExamAnswerOpen, so); } } else if (question is QuestionMultipleChoice) { StudentExamAnswerMultipleChoice sc = _studentExamAnswerManager.GetByStudentExamAndQuestionMultiple(studentExamId, question.Id); StudentExamAnswerMultipleChoice studentExamAnswerMultipleChoice = new StudentExamAnswerMultipleChoice( _questionManager.GetMultipleChoice(question.Id), studentExam, _answerMultipleChoiceManager.Get(examQuestionViewModel.Answers.FirstOrDefault()) ); if (sc == null) { _studentExamAnswerManager.Add(studentExamAnswerMultipleChoice); } else { _studentExamAnswerManager.UpdateMultiple(studentExamAnswerMultipleChoice, sc); } } else { return(NotFound()); } TempData["studentExamId"] = studentExam.Id; //Checking which type of submit button is used switch (submit) { case "Save and back to list": return(RedirectToAction(nameof(Index))); case "Next": int increase = id + 1; return(RedirectToAction("Answer", "ExamQuestion", new { id = increase })); case "Previous": int decrease = id - 1; return(RedirectToAction("Answer", "ExamQuestion", new { id = decrease })); default: return(NotFound()); } } catch (Exception) { return(NotFound()); } }