public ActionResult Edit(int? id, QuestionViewModel questionViewModel) { _connection.Open(); var examId = _connection.Query<int>("SELECT TOP 1 ExamId FROM Questions WHERE QuestionId = @QuestionId", new { QuestionId = id }).Single(); ViewBag.ExamId = examId; var moreThanOneAnswer = questionViewModel.Answers.Count(a => a.IsCorrect) != 1; if(moreThanOneAnswer) ModelState.AddModelError("OnlyOneAnswer","There must be one and only one correct answer"); var anyBlankAnswers = questionViewModel.Answers.Any(a => string.IsNullOrEmpty(a.AnswerText)); if(anyBlankAnswers) ModelState.AddModelError("BlankAnswers", "You must enter text for all answers"); if (!ModelState.IsValid) { _connection.Close(); return View(questionViewModel); } _connection.Execute("UPDATE Questions SET QuestionText = @QuestionText WHERE QuestionId = @QuestionId", new {QuestionId = id, questionViewModel.QuestionText}); foreach (var answer in questionViewModel.Answers) { _connection.Execute("UPDATE Answers SET AnswerText = @AnswerText, IsCorrect = @IsCorrect WHERE AnswerId = @AnswerId", new { answer.AnswerText, answer.IsCorrect, answer.AnswerId }); } _connection.Close(); return RedirectToAction("Index", new { id = examId }); }
public ActionResult Create(int? id, QuestionViewModel questionViewModel) { ViewBag.ExamId = id; var moreThanOneAnswer = questionViewModel.Answers.Count(a => a.IsCorrect) != 1; if(moreThanOneAnswer) ModelState.AddModelError("OnlyOneAnswer","There must be one and only one correct answer"); var anyBlankAnswers = questionViewModel.Answers.Any(a => string.IsNullOrEmpty(a.AnswerText)); if(anyBlankAnswers) ModelState.AddModelError("BlankAnswers", "You must enter text for all answers"); if (!ModelState.IsValid) return View(questionViewModel); _connection.Open(); var questionId = _connection.Query<int>("INSERT INTO Questions (ExamId, QuestionText) VALUES (@ExamId, @QuestionText); SELECT CAST(SCOPE_IDENTITY() AS int);", new { ExamId = id, questionViewModel.QuestionText }); for (var i = 0; i < 4;i++) { var answer = questionViewModel.Answers[i]; _connection.Execute("INSERT INTO Answers (AnswerText, QuestionId, IsCorrect) VALUES (@AnswerText, @QuestionId, @IsCorrect)", new { answer.AnswerText, QuestionId = questionId, answer.IsCorrect }); } _connection.Close(); return RedirectToAction("Index", new { id }); }
public ActionResult Edit(int? id) { _connection.Open(); var questionViewModel = new QuestionViewModel(); var question = _connection.Query<Question>("SELECT TOP 1 QuestionText, ExamId FROM Questions WHERE QuestionId = @QuestionId", new { QuestionId = id }).Single(); ViewBag.ExamId = question.ExamId; questionViewModel.QuestionText = question.QuestionText; questionViewModel.Answers = _connection.Query<Answer>("SELECT AnswerId, AnswerText, IsCorrect FROM Answers WHERE QuestionId = @QuestionId", new { QuestionId = id }).ToList(); _connection.Close(); return View(questionViewModel); }
public ViewResult Print(int? id) { _connection.Open(); var printExamViewModel = new PrintExamViewModel(); printExamViewModel.ExamKey = Guid.NewGuid(); printExamViewModel.Exam = _connection.Query<Exam>("SELECT TOP 1 ExamId, ExamName FROM Exams WHERE ExamId = @ExamId", new { ExamId = id }).Single(); var questions = _connection.Query<Question>("SELECT QuestionId, QuestionText FROM Questions WHERE ExamId = @ExamId ORDER BY NEWID()", new { ExamId = id }); var questionNumber = 1; foreach (var question in questions) { var questionViewModel = new QuestionViewModel(); questionViewModel.QuestionText = question.QuestionText; questionViewModel.Answers = _connection.Query<Answer>("SELECT AnswerId, AnswerText, IsCorrect FROM Answers WHERE QuestionId = @QuestionID ORDER BY NEWID()", new {question.QuestionId }).ToList(); var correctAnswer = questionViewModel.Answers.Single(a => a.IsCorrect); printExamViewModel.AnswerKey.Add(ConvertNumToLetter(questionViewModel.Answers.IndexOf(correctAnswer))); printExamViewModel.Questions.Add(questionViewModel); questionNumber++; } _connection.Close(); return View(printExamViewModel); }