public async Task <IActionResult> Edit(int id, [Bind("CartItemId,ShoppingCartId,DishId,Quantity,Price")] CartItem cartItem, IFormCollection collection) { if (id != cartItem.CartItemId) { return(NotFound()); } _cartService.RemoveCartItemIngredients(id); var _cartItem = _context.CartItems.Include(ci => ci.CartItemIngredients).Include(c => c.Dish).ThenInclude(ci => ci.DishIngredients).ThenInclude(m => m.Ingredient) .Where(ci => ci.CartItemId == id).FirstOrDefault(); _cartItem.Price = _cartItem.Dish.Price; foreach (var item in collection.Keys.Where(m => m.StartsWith("ingredient-"))) { var ingStr = item.Remove(0, 11); var ingId = Int32.Parse(ingStr); var listIngredient = _ingredientService.All().FirstOrDefault(d => d.IngredientId == ingId); _cartItem.CartItemIngredients.Add(new CartItemIngredient() { Ingredient = listIngredient }); _cartItem.Price += _dishService.DishHasIngredient(_cartItem.DishId, listIngredient.IngredientId) ? 0: listIngredient.Price; } if (ModelState.IsValid) { try { _context.Update(_cartItem); await _context.SaveChangesAsync(); } catch (DbUpdateConcurrencyException) { if (!CartItemExists(_cartItem.CartItemId)) { return(NotFound()); } else { throw; } } return(RedirectToAction("Index", "Home")); } ViewData["DishId"] = new SelectList(_context.Dishes, "DishId", "DishId", _cartItem.DishId); ViewData["ShoppingCartId"] = new SelectList(_context.ShoppingCart, "ShoppingCartId", "ShoppingCartId", _cartItem.ShoppingCartId); return(View(_cartItem)); }