/// <summary> /// Get user answer and store to the answer list, render followup question. /// </summary> /// <param name="sender"> /// <param name="e">on button click event protected void btnNext_Click(object sender, EventArgs e) { int _respondentID = (int)Session["rid"]; //pop the current question id from the queue Stack <int> nextQuestionList = (Stack <int>)Session["nextq"]; int currentQuestionId = nextQuestionList.Pop(); question = dbAccess.GetQuestion(currentQuestionId); List <Answer> UserAnswerList = (List <Answer>)Session["AnswerList"]; //initialize the answerList if (UserAnswerList == null) { UserAnswerList = new List <Answer>(); Session["AnswerList"] = UserAnswerList; } //get the next question id and store in the Stack if (question.nq_id != null) { NextQuestion((int)question.nq_id, nextQuestionList); } //get the selected item from the control according to question type switch (question.q_type) { case "rbl": RadioButtonList rbl = (RadioButtonList)optHolder.FindControl("RBL"); foreach (ListItem item in rbl.Items) { if (item.Selected) { if (item.Attributes["nextQID"] != null) { NextQuestion(int.Parse(item.Attributes["nextQID"]), nextQuestionList); } UserAnswerList.Add(new Answer(int.Parse(item.Value), item.Text.ToString(), currentQuestionId, _respondentID)); } } break; case "cbl": CheckBoxList cbl = (CheckBoxList)optHolder.FindControl("CBL"); string answer = ""; foreach (ListItem item in cbl.Items) { if (item.Selected) { answer += item.Text; if (item.Attributes["nextQID"] != null) { NextQuestion(int.Parse(item.Attributes["nextQID"]), nextQuestionList); } UserAnswerList.Add(new Answer(int.Parse(item.Value), item.Text.ToString(), currentQuestionId, _respondentID)); } } Session["Answer"] = answer; break; case "tb": TextBox tb = (TextBox)optHolder.FindControl("TB"); UserAnswerList.Add(new Answer(0, tb.Text.ToString(), currentQuestionId, _respondentID)); Session["Answer"] = tb.Text.ToString(); tb.Text = ""; break; default: TextBox tb2 = (TextBox)optHolder.FindControl("TB"); UserAnswerList.Add(new Answer(0, tb2.Text.ToString(), currentQuestionId, _respondentID)); Session["Answer"] = tb2.Text.ToString(); break; } //if next question stack is emptied, proceed to saving answers to database if (nextQuestionList.Count > 0) { Response.Redirect("Survey.aspx"); } else { Response.Redirect("EndSurvey.aspx"); } }
public async Task <IActionResult> AnswerList() { List <SelectListItem> formsList = new List <SelectListItem>(); /*var usersAnswers = _context.UserAnswers * .Where(m => m.IdForm.Equals(id)) * .ToList();*/ var forms = _context.Forms .ToList(); foreach (var elem in forms) { SelectListItem tmp = new SelectListItem(); tmp.Text = elem.Name; tmp.Value = elem.Id.ToString(); formsList.Add(tmp); } ViewBag.List = formsList; var usersAnswers = _context.UserAnswers .ToList(); List <UserAnswerList> answersList = new List <UserAnswerList>(); bool exist = false; bool doubled = false; int idx = -1; UserAnswerList newUAL; foreach (var elem in usersAnswers) { exist = false; doubled = false; for (int i = 0; i < answersList.Count; i++) { for (int j = 0; j < answersList[i].user_answer_list.Count; j++) { if (answersList[i].user_answer_list[j].IdForm == elem.IdForm && answersList[i].user_answer_list[j].IdField == elem.IdField && answersList[i].user_answer_list[j].IdUser == elem.IdUser) { doubled = true; } } if (answersList[i].Id_User.Equals(elem.IdUser)) { idx = i; exist = true; } } if (!exist) { newUAL = new UserAnswerList(); newUAL.Id_User = elem.IdUser; newUAL.user_answer_list.Add(elem); answersList.Add(newUAL); } else { if (!doubled) { answersList[idx].user_answer_list.Add(elem); } } } /*var _form = _context.FormField * .Where(m => m.IdForm.Equals(id)) * .Select(m => m.IdField) * .ToList(); * * var _fields = _context.Field * .Where(m => _form.Contains(m.Id)) * .ToList();*/ var _form = _context.FormField .Select(m => m.IdField) .ToList(); var _fields = _context.Field .Where(m => _form.Contains(m.Id)) .ToList(); ViewBag.Fields = _fields; ViewBag.FormId = 0; var xD = await _context.UserAnswerList .Where(m => m.user_answer_list.Count > 0) .ToListAsync(); return(View(answersList)); }