public ActionResult CreateQuestion(Questionnaire questionnaire, QuestionnaireEditData model, string selectedQType, int id = 0) { if (ModelState.IsValid) { model.Question.QTypeName = selectedQType; _db.Questions.Add(model.Question); _db.SaveChanges(); return(RedirectToAction("Edit", "Questionnaire", new { id })); } return(View(model)); }
// // GET: /Questionnaire/Edit/5 public ActionResult Edit(int id = 1, int err = 0) { if (err != 0) { ViewBag.message = "The section is still being used and cannot be deleted."; } else { ViewBag.message = ""; } var viewModel = new QuestionnaireEditData(); List <SelectListItem> qTypeNames = _db.QTypes .ToList() .Select(q => new SelectListItem { Value = q.QTypeName, Text = q.QTypeName }).OrderBy(o => o.Text).ToList(); viewModel.QTypeNames = new SelectList(qTypeNames, "Value", "Text"); /* Add Fully Loaded (.Included) Questionnaire to the ViewModel */ viewModel.Questionnaire = _db.Questionnaires .Include(a => a.QuestionnaireQuestions .Select(b => b.Question)) .Include(a => a.QuestionnaireQuestions .Select(b => b.QuestionnaireQCategory).Select(c => c.QCategory)) .Include(a => a.QuestionnaireQCategories) .Where(n => n.QuestionnaireId == id) .Single(); viewModel.Questionnaire.QuestionnaireQuestions = viewModel.Questionnaire.QuestionnaireQuestions.Where(x => x.UserId == 0).ToList(); viewModel.Questionnaire.QuestionnaireQCategories = viewModel.Questionnaire.QuestionnaireQCategories.Where(x => x.UserId == 0).ToList(); ICollection <QuestionnaireQuestion> sortQQs = viewModel.Questionnaire.QuestionnaireQuestions; viewModel.Questionnaire.QuestionnaireQuestions = sortQQs.OrderBy(x => x.QuestionnaireQCategory.Ordinal).ThenBy(x => x.Ordinal).ToList(); /* Build Questionnaire Question DropDownList and add to ViewModel */ List <SelectListItem> allQuestions = _db.Questions .ToList() .Select(q => new SelectListItem { Value = q.QuestionId.ToString(CultureInfo.InvariantCulture), Text = q.QuestionText }).ToList(); viewModel.QuestionDropDownLists = new List <KeyValuePair <int, SelectList> >(); var newSelectList = new SelectList(allQuestions, "Value", "Text"); viewModel.QuestionDropDownLists.Add(new KeyValuePair <int, SelectList>(-1, newSelectList)); foreach (QuestionnaireQuestion QQ in viewModel.Questionnaire.QuestionnaireQuestions) { newSelectList = new SelectList(allQuestions, "Value", "Text", QQ.QuestionId); viewModel.QuestionDropDownLists.Add(new KeyValuePair <int, SelectList>(QQ.Id, newSelectList)); } /* Build Questionnaire Question Category DropDownList and add to ViewModel */ //var allQCategories = _db.QCategories List <SelectListItem> allQCategories = _db.QuestionnaireQCategories.Where(x => x.UserId == 0) .ToList() .Select(q => new SelectListItem { //Value = q.QCategoryId.ToString(CultureInfo.InvariantCulture), Value = q.Id.ToString(CultureInfo.InvariantCulture), //Text = q.QCategoryName Text = _db.QCategories.Single(x => x.QCategoryId == q.QCategoryId).QCategoryName }).OrderBy(o => o.Text).ToList(); viewModel.QCategoryDropDownLists = new List <KeyValuePair <int, SelectList> >(); newSelectList = new SelectList(allQCategories, "Value", "Text"); viewModel.QCategoryDropDownLists.Add(new KeyValuePair <int, SelectList>(-1, newSelectList)); foreach (QuestionnaireQuestion QQ in viewModel.Questionnaire.QuestionnaireQuestions) { newSelectList = new SelectList(allQCategories, "Value", "Text", QQ.QQCategoryId); viewModel.QCategoryDropDownLists.Add(new KeyValuePair <int, SelectList>(QQ.Id, newSelectList)); } /* Build Questionnaire Question Ordinal DropDownList and add to ViewModel */ List <SelectListItem> allOrdinals = new List <SelectListItem>(); for (int i = 1; i < 101; i++) { var item = new SelectListItem(); item.Value = i.ToString(); item.Text = i.ToString(); allOrdinals.Add(item); } viewModel.OrdinalDropDownLists = new List <KeyValuePair <int, SelectList> >(); newSelectList = new SelectList(allOrdinals, "Value", "Text"); viewModel.OrdinalDropDownLists.Add(new KeyValuePair <int, SelectList>(-1, newSelectList)); foreach (QuestionnaireQuestion QQ in viewModel.Questionnaire.QuestionnaireQuestions) { newSelectList = new SelectList(allOrdinals, "Value", "Text", QQ.Ordinal); viewModel.OrdinalDropDownLists.Add(new KeyValuePair <int, SelectList>(QQ.Id, newSelectList)); } /* Get Sections Assigned to this Questionnaire*/ List <KeyValuePair <int, string> > questionnaireSections = _db.QuestionnaireQCategories.Where(x => x.UserId == 0 && x.QuestionnaireId == 1) .ToList() .Select(q => new KeyValuePair <int, string>(q.Id, q.QCategory.QCategoryName)) .OrderBy(o => o.Value) .ToList(); viewModel.QuestionnaireSections = questionnaireSections; /* Get all Sections*/ List <SelectListItem> allSections = _db.QCategories .ToList() .Select(q => new SelectListItem { Value = q.QCategoryId.ToString(CultureInfo.InvariantCulture), Text = q.QCategoryName }).OrderBy(o => o.Text).ToList(); allSections.Add(new SelectListItem() { Value = "-1", Text = "" }); viewModel.Sections = allSections; ViewBag.QuestionnaireId = id; if (viewModel.Questionnaire == null) { return(HttpNotFound()); } return(View(viewModel)); }