public ActionResult Create( [Bind(Prefix = "Race", Include = "BaseURL,RaceId,ApiName,DisplayName,LongDisplayName,RaceDate,ShortName,Distance")] Race race) { var rc = new RaceConditions(); race.Conditions = rc; race.RaceId = race.RaceId.ToUpper(); if (ModelState.IsValid) { race.ValidateMessage = "Not Validated"; _DBContext.Races.Add(race); _DBContext.SaveChanges(); return(RedirectToAction("Index")); } else { //NOTE: This is a temporary workaround. The View needs the model and should display the correct error //but this view needs both a Race model and a Conditions Model and I need to build that ViewModel ModelState.AddModelError("", "ERROR!!"); } return(View("List")); }
public ActionResult DeleteConfirmed(int id /*race condition id*/) { RaceConditions raceConditions = db.RaceConditions.Find(id); db.RaceConditions.Remove(raceConditions); db.SaveChanges(); return(RedirectToAction("Index")); }
public ActionResult Create([Bind(Include = "RaceConditionsId,SwimLayout,BikeLayout,RunLayout")] RaceConditions raceConditions) { if (ModelState.IsValid) { db.RaceConditions.Add(raceConditions); db.SaveChanges(); return(RedirectToAction("Index")); } return(View(raceConditions)); }
// GET: RaceConditions/Delete/5 public ActionResult Delete(int?id /*racecondition id */) { if (id == null) { return(new HttpStatusCodeResult(HttpStatusCode.BadRequest)); } RaceConditions raceConditions = db.RaceConditions.Find(id); if (raceConditions == null) { return(HttpNotFound()); } return(View(raceConditions)); }
public ActionResult Edit( [Bind(Prefix = "Race", Include = "RaceId,ApiName,ConditionsId,BaseURL,DisplayName,LongDisplayName,RaceDate,ShortName,Distance")] Race race, [Bind(Prefix = "Conditions", Include = "RaceConditionsId,SwimLayout,BikeLayout,RunLayout")] RaceConditions conditions) { if (ModelState.IsValid) { _DBContext.Entry(race).State = EntityState.Modified; _DBContext.SaveChanges(); _DBContext.Entry(conditions).State = EntityState.Modified; _DBContext.SaveChanges(); return(RedirectToAction("Index")); } return(View(race)); }
private void Save(RaceConditions conditions, SimpleRaceConditionsViewModel viewModel) { Save(conditions, conditions.SwimLayout, viewModel.selectedSwimLayout, TagType.SwimLayout); Save(conditions, conditions.SwimMedium, viewModel.selectedSwimMedium, TagType.SwimMedium); Save(conditions, conditions.SwimOther, viewModel.selectedSwimOther, TagType.SwimOther); Save(conditions, conditions.SwimWeather, viewModel.selectedSwimWeather, TagType.SwimWeather); Save(conditions, conditions.BikeLayout, viewModel.selectedBikeLayout, TagType.BikeLayout); Save(conditions, conditions.BikeMedium, viewModel.selectedBikeMedium, TagType.BikeMedium); Save(conditions, conditions.BikeOther, viewModel.selectedBikeOther, TagType.BikeOther); Save(conditions, conditions.BikeWeather, viewModel.selectedBikeWeather, TagType.BikeWeather); Save(conditions, conditions.RunLayout, viewModel.selectedRunLayout, TagType.RunLayout); Save(conditions, conditions.RunMedium, viewModel.selectedRunMedium, TagType.RunMedium); Save(conditions, conditions.RunOther, viewModel.selectedRunOther, TagType.RunOther); Save(conditions, conditions.RunWeather, viewModel.selectedRunWeather, TagType.RunWeather); }
private void Save(RaceConditions conditions, List <RaceConditionTag> persistedList, List <String> selectedValues, TagType tagType) { if (selectedValues == null) { if (persistedList.Count > 0) { selectedValues = new List <string>(); //the reason we continue is in the case wehre all items have been removed from list and we need to delete them } else { return; //we have no further business to do } } //get the tagIds that have previously been saved and convert them to strings in order to compare them var savedList = persistedList.Select(t => t.TagId).ToList().ConvertAll <string>(delegate(int i) { return(i.ToString()); }); //get the unique items that should be added var newItems = selectedValues.Except(savedList).ToList(); //find the items that were removed var deletedItems = savedList.Except(selectedValues).ToList(); foreach (string id in deletedItems) { var rcTag = persistedList.Where(m => m.TagId == Int32.Parse(id)).SingleOrDefault(); persistedList.Remove(rcTag); db.RaceConditionTags.Remove(rcTag); } foreach (string s in newItems) { Tag tag; int tagId; bool result = Int32.TryParse(s, out tagId); //tag is either a tag id or a new tag value that the user typed if (result) { tag = db.Tags.Find(tagId); } else //a new tag { tag = new Tag { Value = s, Type = tagType }; db.Tags.Add(tag); db.SaveChanges(); } var rcTag = new RaceConditionTag //because we already filtered out new items, we should always need to create { RaceConditions = conditions, RaceConditionsId = conditions.RaceConditionsId, //when this is a new racecondition, this id is not being populated into the table, so we're forcing it Tag = tag, TagId = tag.TagId, Count = 1 }; db.RaceConditionTags.Add(rcTag); //add the rc tag to the database //persistedList.Add(rcTag); //relate the rc tag to the condition-specific-list //tag.RaceConditionTags.Add(rcTag); } db.SaveChanges(); }
private void IncrementTagCount(RaceConditions conditions, List <int> tagIds) { if (tagIds == null) { return; } foreach (var id in tagIds) { Tag tag = db.Tags.Find(id); RaceConditionTag rcTag; switch (tag.Type) { case TagType.SwimLayout: rcTag = conditions.SwimLayout.Find(t => t.TagId == id); break; case TagType.SwimMedium: rcTag = conditions.SwimMedium.Find(t => t.TagId == id); break; case TagType.SwimWeather: rcTag = conditions.SwimWeather.Find(t => t.TagId == id); break; case TagType.SwimOther: rcTag = conditions.SwimOther.Find(t => t.TagId == id); break; case TagType.BikeLayout: rcTag = conditions.BikeLayout.Find(t => t.TagId == id); break; case TagType.BikeMedium: rcTag = conditions.BikeMedium.Find(t => t.TagId == id); break; case TagType.BikeWeather: rcTag = conditions.BikeWeather.Find(t => t.TagId == id); break; case TagType.BikeOther: rcTag = conditions.BikeOther.Find(t => t.TagId == id); break; case TagType.RunLayout: rcTag = conditions.RunLayout.Find(t => t.TagId == id); break; case TagType.RunMedium: rcTag = conditions.RunMedium.Find(t => t.TagId == id); break; case TagType.RunWeather: rcTag = conditions.RunWeather.Find(t => t.TagId == id); break; case TagType.RunOther: rcTag = conditions.RunOther.Find(t => t.TagId == id); break; default: throw new Exception("Tag Condition not found"); } if (rcTag == null) //a new tag added by user { rcTag = new RaceConditionTag { RaceConditions = conditions, RaceConditionsId = conditions.RaceConditionsId, //when this is a new racecondition, this id is not being populated into the table, so we're forcing it Tag = tag, TagId = tag.TagId, Count = 1 }; switch (tag.Type) { case TagType.SwimLayout: conditions.SwimLayout.Add(rcTag); break; case TagType.SwimMedium: conditions.SwimMedium.Add(rcTag); break; case TagType.SwimWeather: conditions.SwimWeather.Add(rcTag); break; case TagType.SwimOther: conditions.SwimOther.Add(rcTag); break; case TagType.BikeLayout: conditions.BikeLayout.Add(rcTag); break; case TagType.BikeMedium: conditions.BikeMedium.Add(rcTag); break; case TagType.BikeWeather: conditions.BikeWeather.Add(rcTag); break; case TagType.BikeOther: conditions.BikeOther.Add(rcTag); break; case TagType.RunLayout: conditions.RunLayout.Add(rcTag); break; case TagType.RunMedium: conditions.RunMedium.Add(rcTag); break; case TagType.RunWeather: conditions.RunWeather.Add(rcTag); break; case TagType.RunOther: conditions.RunOther.Add(rcTag); break; default: throw new Exception("Tag Condition not found"); } db.RaceConditionTags.Add(rcTag); } else { rcTag.Count += 1; } db.SaveChanges(); } }