public async Task <IActionResult> Edit(int id, [Bind("Id,ResourceId,PersonId,EventDate")] ResourceEvent resourceEvent) { if (id != resourceEvent.Id) { return(NotFound()); } if (ModelState.IsValid) { try { _resourceContext.Update(resourceEvent); await _resourceContext.SaveChangesAsync(); } catch (DbUpdateConcurrencyException) { if (!ResourceEventExists(resourceEvent.Id)) { return(NotFound()); } else { throw; } } return(RedirectToAction(nameof(Index))); } return(View(resourceEvent)); }
public async Task <IActionResult> Edit(int id, [Bind("ID,Subject,Description,CategoryID,BadlinkVotes,CreateDate,Status")] Resource resource) { if (id != resource.ID) { return(NotFound()); } if (ModelState.IsValid) { try { _context.Update(resource); await _context.SaveChangesAsync(); } catch (DbUpdateConcurrencyException) { if (!ResourceExists(resource.ID)) { return(NotFound()); } else { throw; } } return(RedirectToAction(nameof(Index))); } ViewData["CategoryID"] = new SelectList(_context.ResourceCategories, "ID", "ID", resource.CategoryID); return(View(resource)); }
public async Task <IActionResult> Edit(int id, [Bind("Id,Name")] Person person) { if (id != person.Id) { return(NotFound()); } if (ModelState.IsValid) { try { _context.Update(person); await _context.SaveChangesAsync(); } catch (DbUpdateConcurrencyException) { if (!PersonExists(person.Id)) { return(NotFound()); } else { throw; } } return(RedirectToAction(nameof(Index))); } return(View(person)); }
public async Task <IActionResult> Edit(int id, string returnUrl, [Bind("Resource, Tags")] AdminEditViewModel editedResource) { //TODO: implement the anti-overposting mechanism in the Contoso University example. if (id != editedResource.Resource.ID) { return(NotFound()); } if (ModelState.IsValid) { try { var resourceToUpdate = editedResource.Resource; _context.Update(editedResource.Resource); // process tags var currentTagAssociations = await _context.ResourceTags .Include(rt => rt.Tag) .AsNoTracking() .Where(rt => rt.ResourceID == id) .ToListAsync(); //existing tags var tagsBefore = currentTagAssociations.Select(rt => rt.Tag.Name).ToHashSet(); var tagsAfter = new HashSet <string>(); if (!string.IsNullOrWhiteSpace(editedResource.Tags)) { tagsAfter = editedResource.Tags.Split(",") .Where(p => !string.IsNullOrWhiteSpace(p)) .Select(p => p?.Trim()).ToList().ToHashSet(); } var tagNamesToRemoveFromResource = tagsBefore.Except(tagsAfter); if (tagNamesToRemoveFromResource.Count() != 0) { var tagsToRemove = from t in currentTagAssociations where tagNamesToRemoveFromResource.Contains(t.Tag.Name) select t; _context.ResourceTags.RemoveRange(tagsToRemove); } var tagNamesToAddToResource = new HashSet <string>(tagsAfter.Except(tagsBefore)); // add unknown tags if (tagNamesToAddToResource.Count() != 0) { var existingTags = _context.Tags.AsNoTracking().Select(t => t.Name).ToList(); var unknownTagNames = tagNamesToAddToResource.Except(new HashSet <string>(existingTags)); foreach (var unknownTagName in unknownTagNames) { var tagEntity = _context.Tags.Add(new Tag { Name = unknownTagName }); await _context.SaveChangesAsync(); } } // add tagNamesToAddToResource to the resource foreach (var tagName in tagNamesToAddToResource) { var tag = _context.Tags.AsNoTracking().FirstOrDefault(t => string.Equals(t.Name, tagName, StringComparison.Ordinal)); _context.ResourceTags.Add(new ResourceTag() { ResourceID = resourceToUpdate.ID, TagID = tag.ID }); } await _context.SaveChangesAsync(); } catch (DbUpdateConcurrencyException) { if (!ResourceExists(editedResource.Resource.ID)) { return(NotFound()); } else { throw; } } if (string.IsNullOrEmpty(returnUrl) || !Url.IsLocalUrl(returnUrl)) { return(RedirectToAction("Index")); } return(Redirect(returnUrl)); } return(View(editedResource)); }