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 })); }