예제 #1
0
    /// <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));
        }