public EditDivisionViewModel CreateEditDivisionViewModel(Division division) { var model = new EditDivisionViewModel() { Id = division.Id, Version = division.EncodedVersion, SeasonName = division.Season.Name, Name = division.Name, StartingDate = division.StartingDate.ToShortDateString() }; return model; }
public ActionResult Edit(EditDivisionViewModel viewModel) { if (!ModelState.IsValid) { return View(viewModel); } var division = repository.Get<Division>(viewModel.Id); // loading the season name here serves two purposes: // (1) reload the season name in case we have to redisplay the view due to error // (2) lazily load the division.Season property, because EF is too stupid // to update the division without Season being set, it thinks you're trying // to set the season to null viewModel.SeasonName = division.Season.Name; DateTime startingDate; if (!DateTime.TryParse(viewModel.StartingDate, out startingDate)) { ModelState.AddModelErrorFor<EditDivisionViewModel>(m => m.StartingDate, "Enter a valid date"); return View(viewModel); } if (null == division) { TempData[GlobalViewDataProperty.PageErrorMessage] = "The division you were editing was deleted by another user"; return RedirectToAction("Index", "Seasons"); } if (viewModel.Version != division.EncodedVersion) { return EditRedirectForConcurrency(viewModel.Id); } if (!division.Name.Equals(viewModel.Name)) { // verify that the new name is not already in use if (division.Season.DivisionNameIsInUse(viewModel.Name)) { ModelState.AddModelErrorFor<EditDivisionViewModel>(m => m.Name, "Name is in use"); viewModel.Name = division.Name; return View(viewModel); } division.Name = viewModel.Name; } division.StartingDate = startingDate; try { repository.SaveChanges(); } catch (UpdateConcurrencyException) { return EditRedirectForConcurrency(viewModel.Id); } TempData[GlobalViewDataProperty.PageNotificationMessage] = "The division was updated"; return RedirectToAction("Details", "Seasons", new { id = division.Season.Id }); }