//public ActionResult Edit([Bind(Include = "Id,Title,Description,Created,Updated,ProjectId,TicketStatusId,TicketPriorityId,TicketTypeId,OwnerUserId,AssignedToUserId")] Ticket ticket) public async Task <ActionResult> Edit([Bind(Include = "Id,Title,Description,Created,Updated,ProjectId,TicketStatusId,TicketPriorityId,TicketTypeId,OwnerUserId,AssignedToUserId")] Ticket ticket) { //retrieve original ticket from database, but do not cache it in this dbcontext. This will be the "oldTicket" var oldTicket = this.db.Tickets.AsNoTracking().FirstOrDefault(t => t.Id == ticket.Id); if (ModelState.IsValid) { //Sets ticket status according to whether it's been assigned or not. // rewrite to use switch statement if (ticket.AssignedToUserId != null && ticket.TicketStatusId == 2) { ticket.TicketStatusId = 1; } if (ticket.AssignedToUserId == null && ticket.TicketStatusId == 1) { ticket.TicketStatusId = 2; if (User.IsInRole("Admin")) { ticket.AssignedToUserId = User.Identity.GetUserId(); } else { ticket.AssignedToUserId = ticket.Project.PMID; } } if (ticket.AssignedToUserId == null && ticket.TicketStatusId == 3) { //ticket.AssignedToUserId = User.Identity.GetUserId(); ticket.AssignedToUserId = ticket.Project.PMID; //this.db.Tickets.AsNoTracking().FirstOrDefault(t => t.Id == ticket.Id); } if (ticket.AssignedToUserId != null && ticket.OwnerUserId != null) { //Use ProjectsHelper to //add developer to project once they are assigned to a ticket ProjectsHelper phelper = new ProjectsHelper(); phelper.AddUserToProject(ticket.AssignedToUserId, ticket.ProjectId); phelper.AddUserToProject(ticket.OwnerUserId, ticket.ProjectId); } if (ticket.OwnerUserId == null) { ticket.OwnerUserId = User.Identity.GetUserId(); } ticket.Updated = DateTimeOffset.Now; db.Entry(ticket).State = EntityState.Modified; db.SaveChanges(); //ticketshelper to create the ticket history if (TicketsHelper.HasTicketChanged(oldTicket, ticket)) { TicketsHelper.AddTicketHistory(oldTicket, ticket); } //Send the relevant data to create notifications await this.tixHelper.GenerateNotifications(oldTicket, ticket); //return to ticket details so user can see updated changes. return(RedirectToAction("Details", "Tickets", new { id = ticket.Id })); } ViewBag.AssignedToUserId = new SelectList(db.Users, "Id", "FirstName", ticket.AssignedToUserId); ViewBag.OwnerUserId = new SelectList(db.Users, "Id", "FirstName", ticket.OwnerUserId); ViewBag.ProjectId = new SelectList(db.Projects, "Id", "Name", ticket.ProjectId); ViewBag.TicketPriorityId = new SelectList(db.TicketPrioritys, "Id", "Name", ticket.TicketPriorityId); ViewBag.TicketStatusId = new SelectList(db.TicketStatus, "Id", "Name", ticket.TicketStatusId); ViewBag.TicketTypeId = new SelectList(db.TicketTypes, "Id", "Name", ticket.TicketTypeId); return(View(ticket)); }