Exemplo n.º 1
0
        public ActionResult ViewSurvey(SurveyPlanViewModel model)
        {
            bool isValid = ModelState.IsValid;

            // Валидация модели
            for (int i = 0; i < model.QuestionModels.Count; i++)
            {
                // В зависимости от типа вопроса проверяем наличие ответа на него
                var question = model.QuestionModels[i];
                switch (question.Type)
                {
                case QuestionType.ClosedSingle:
                    if (question.SelectedIndex < 0)
                    {
                        isValid = false;
                        ModelState.AddModelError($"QuestionModels[{i}]", "Не сделан выбор");
                    }
                    break;

                case QuestionType.ClosedMultiple:
                    if (question.Answers.All(a => !a.IsSelected))
                    {
                        isValid = false;
                        ModelState.AddModelError($"QuestionModels[{i}]", "Не выбрано ни одного значения");
                    }
                    break;

                case QuestionType.Open:
                    if (string.IsNullOrEmpty(question.Answers[0].Text))
                    {
                        isValid = false;
                        ModelState.AddModelError($"QuestionModels[{i}]", "Не введен ответ");
                    }
                    break;
                }
            }

            // Сливаем полученную модель с ранее сохраненной моделью, т. к. тексты вопросов/ответов
            //  в странице не сохраняются и в модели не передаются
            var dbModel = (SurveyPlanViewModel)Session["SurveyPlanViewModel"];

            ViewModelHelper.MergeSurveyPlanViewModels(dbModel, model);

            if (!isValid)
            {
                return(View(dbModel));
            }

            // Если все нормально, сохраняем модель...
            var modelToSave = ViewModelHelper.CreateFinishedSurveyModel(dbModel);
            var id          = _finishedSurveyService.Save(modelToSave);

            //  ... и переадресуемся на страницу просмотра результатов опроса
            return(RedirectToAction("ViewFinishedSurvey", new { id }));
        }