// GET: Tests/Edit/5 public ActionResult Edit(int id) { Test test = _testService.GetTest(id); var existingCategoriesWithCount = _testService.GetQuestionCategoriesWithCounts(id); //Test test = _testRepository.GetTestByID(id); - repo //var existingCategoriesWithCount = _questionCategoryRepository.GetQuestionCategoryWithQuestionCount(id); - repo TestWithQuestionCategoryCountsVm vm = new TestWithQuestionCategoryCountsVm(); vm.ID = test.ID; vm.TestName = test.TestName; vm.TestDescription = test.TestDescription; vm.QuestionCategoriesWithCounts = new List<QuestionCategoryWithCountVm>(); existingCategoriesWithCount.Where(i=>i.QuestionCategory != null).ForEach(x=>vm.QuestionCategoriesWithCounts.Add(new QuestionCategoryWithCountVm { CategoryName = x.QuestionCategory.CategoryName, TestID = x.QuestionCategory.TestID, ID = x.QuestionCategory.ID, Count = x.Count })); var node = SiteMaps.Current.CurrentNode; if (node != null) { node.ParentNode.Title = vm.TestName; } if (vm.ID == 0) { return HttpNotFound(); } return View(vm); }
public ActionResult EditPost(int id, string testName, string testDescription, IEnumerable<QuestionCategoryWithCountVm> questionCategoriesWithCounts) { //var testToUpdate = db.Tests.Include(q => q.QuestionCategories).SingleOrDefault(x => x.ID == id); //var testToUpdate = _testRepository.GetTestByID(id); var testToUpdate = _testService.GetTest(id); testToUpdate.TestName = testName; testToUpdate.TestDescription = testDescription; _testService.Update(testToUpdate); //_testRepository.UpdateTest(testToUpdate); //db.Entry(testToUpdate).State = EntityState.Modified; var existingCategories = testToUpdate.QuestionCategories; var vm = new TestWithQuestionCategoryCountsVm(); vm.ID = id; vm.QuestionCategoriesWithCounts = questionCategoriesWithCounts != null ? questionCategoriesWithCounts.ToList() : new List<QuestionCategoryWithCountVm>(); var node = SiteMaps.Current.CurrentNode; if (node != null) { node.ParentNode.Title = vm.TestName; } if (ModelState.IsValid) { if (TryUpdateModel(vm, "", new string[] { "TestName", "TestDescription", "QuestionCategoriesWithCounts" })) { List<QuestionCategory> updatedCategories = new List<QuestionCategory>(); questionCategoriesWithCounts.ForEach(x => updatedCategories.Add(new QuestionCategory { ID = x.ID, TestID = x.TestID, CategoryName = x.CategoryName })); bool errors = false; var deletedCategories = questionCategoriesWithCounts != null ? existingCategories.ExceptComparison(updatedCategories, cat => cat.ID) : existingCategories; foreach (QuestionCategory deletedCat in deletedCategories.ToList()) { var catForDeletion = new QuestionCategoryWithCountVm { CategoryName = deletedCat.CategoryName, ID = deletedCat.ID, TestID = deletedCat.TestID }; try { _testService.DeleteQuestionCateogry(deletedCat.ID); //_questionCategoryRepository.DeleteQuestionCategory(deletedCat.ID); //db.Entry(deletedCat).State = EntityState.Deleted; //db.SaveChanges(); } catch (DataException) { vm.QuestionCategoriesWithCounts.Add(catForDeletion); errors = true; ModelState.AddModelError(deletedCat.CategoryName, "Questions exist with this category, you must update them to use a different category before you can delete it."); } } var addeddCategories = updatedCategories.ExceptComparison(existingCategories, e => e.ID); var modifiedCategories = updatedCategories.ExceptComparison(addeddCategories, f => f.ID); foreach (QuestionCategory category in modifiedCategories) { var existingCat = _testService.GetQuestionCategory(id); //var existingCat = _questionCategoryRepository.GetQuestionCategoryByID(category.ID); if (existingCat != null) { if (!String.IsNullOrEmpty(category.CategoryName)) { existingCat.CategoryName = category.CategoryName; _testService.UpdateQuestionCategory(existingCat); //_questionCategoryRepository.UpdateQuestionCategory(existingCat); //var catEntry = db.Entry(existingCat); //catEntry.CurrentValues.SetValues(category); } else { errors = true; ModelState.AddModelError("cat-"+category.ID, "You must specify a category name."); } } } foreach (QuestionCategory category in addeddCategories) { if (!String.IsNullOrEmpty(category.CategoryName)) { _testService.CreateQuestionCategory(category); //_questionCategoryRepository.InsertQuestionCategory(category); //db.Entry(category).State = EntityState.Added; } else { errors = true; ModelState.AddModelError("AddedCategoryError", "You must specify a category name."); } } try { //_questionCategoryRepository.Save(); //_testRepository.Save(); } catch (DataException dex) { errors = true; ModelState.AddModelError(dex.Message, "Unable to save changes. Try again."); } if (errors) { return View(vm); } else { return RedirectToAction("Index"); } } } vm.TestDescription = testDescription; vm.TestName = testName; return View(vm); }
// GET: Tests/Edit/5 public ActionResult Edit(int? id) { if (id == null) { return new HttpStatusCodeResult(HttpStatusCode.BadRequest); } var existingCategoriesWithCount = (from test in db.Tests select test into t from questionCategory in t.QuestionCategories.DefaultIfEmpty() let summedCount = (from question in db.Questions where (question.QuestionCategory.ID == questionCategory.ID) select question.ID).Count() where t.ID == id select new { t, questionCategory, summedCount }).ToList(); TestWithQuestionCategoryCountsVm vm = new TestWithQuestionCategoryCountsVm(); vm.ID = existingCategoriesWithCount.First().t.ID; vm.TestName = existingCategoriesWithCount.First().t.TestName; vm.TestDescription = existingCategoriesWithCount.First().t.TestDescription; vm.QuestionCategoriesWithCounts = new List<QuestionCategoryWithCountVm>(); existingCategoriesWithCount.Where(i=>i.questionCategory!=null).ForEach(x=>vm.QuestionCategoriesWithCounts.Add(new QuestionCategoryWithCountVm { CategoryName = x.questionCategory.CategoryName, TestID = x.questionCategory.TestID, ID = x.questionCategory.ID, Count = x.summedCount })); var node = SiteMaps.Current.CurrentNode; if (node != null) { node.ParentNode.Title = vm.TestName; } if (vm.ID == 0) { return HttpNotFound(); } return View(vm); }