【问题标题】:how to Add list of products from cart?如何从购物车中添加产品列表?
【发布时间】:2021-04-19 12:11:12
【问题描述】:

亲爱的, 我有一个使用 ASP.Net Core 3.1 发布订单的 API 我想发布订单头并从购物车项目中的另一个 api 获取所有项目并将其发布到订单项目中我的代码如下

[HttpPost("addOrderHead")]
    public async Task<ActionResult<OrderDto>> Posting(OrderDto dto)
    {
        try
        {
            if (dto == null)
            {
                return BadRequest(ModelState);
            }
            if (!ModelState.IsValid)
            {
                return BadRequest(ModelState);
            }
            var mappedEntities = _mapper.Map<Order>(dto);
            _orderRepository.Add(mappedEntities);
            if (await _orderRepository.Save())
            {
                
                int id = mappedEntities.OrderID;
                var cartItems = await _cartItemRepository.GetCartItems(mappedEntities.ApplicationUserId);

                var cartDto = new CartItemDto();
                foreach(var item in cartItems)
                {
                    cartDto.ItemID = item.ItemID;
                    cartDto.ItemLookupCode = item.ItemLookupCode;
                    cartDto.CategoryID = item.CategoryID;
                    cartDto.DepartmentID = item.DepartmentID;
                    cartDto.itemDescription = item.itemDescription;
                    cartDto.SubDescription3 = item.SubDescription3;
                    cartDto.Quantity = item.Quantity;
                    cartDto.Weight = item.Weight;
                    cartDto.SnapShotPrice = item.SnapShotPrice;
                    cartDto.StoreId = item.StoreId;
                    cartDto.barcode = item.barcode;
                    cartDto.Email = item.Email;
                    cartDto.ItemImage = item.ItemImage;
                };
                var items = new OrderItems()
                {
                    OrderId = id,
                    ItemID = cartDto.ItemID,
                    ItemLookupCode = cartDto.ItemLookupCode,
                    CategoryID = cartDto.CategoryID,
                    DepartmentID = cartDto.DepartmentID,
                    itemDescription = cartDto.itemDescription,
                    SubDescription3 = cartDto.SubDescription3,
                    Quantity = cartDto.Quantity,
                    Weight = cartDto.Weight,
                    SnapShotPrice = cartDto.SnapShotPrice,
                    StoreId = cartDto.StoreId,
                    barcode = cartDto.barcode,
                    Email = cartDto.Email,
                    ItemImage = cartDto.ItemImage,
                };
                _orderItemsRepository.Add(items);
                await _orderItemsRepository.Save();
                return Ok(id);
            }

            return BadRequest(ModelState);
        }
        catch (Exception ex)
        {
            return StatusCode(StatusCodes.Status500InternalServerError, ex.InnerException.Message);
        }
    }

每次我运行这个 api 订单头添加成功并且订单项目只添加第一个项目 哪些购物车物品与物品数组一起返回, 谁能帮帮我,

【问题讨论】:

    标签: asp.net asp.net-core asp.net-web-api


    【解决方案1】:

    您需要将Add(可能还有.Save())放入foreach

    var cartItems = await _cartItemRepository.GetCartItems(mappedEntities.ApplicationUserId);
    
    
    foreach(var item in cartItems)
    {
        var cartDto = new CartItemDto(); // inside foreach
        cartDto.ItemID = item.ItemID;
        ....
    
        var item = new OrderItems()  // one item - not: items
        {
            OrderId = id,
            ItemID = cartDto.ItemID,
            ...
            ItemImage = cartDto.ItemImage,
        };
        _orderItemsRepository.Add(item); // add item before moving to next item.
    }
    await _orderItemsRepository.Save();
    

    顺便说一句。我不确定你为什么需要cartDto;我认为您可以消除它:

    var cartItems = await _cartItemRepository.GetCartItems(mappedEntities.ApplicationUserId);
    
    
    foreach(var item in cartItems)
    {
        var item = new OrderItems()  // one item - not: items
        {
            OrderId = id,
            ItemID = item.ItemID,
            ...
            ItemImage = item.ItemImage,
        };
        _orderItemsRepository.Add(item); // add item before moving to next item.
    }
    await _orderItemsRepository.Save();
    

    【讨论】:

      【解决方案2】:

      代码不正确。在下面的行中,你应该是 List 而不是 object

      var cartItems = await _cartItemRepository.GetCartItems(mappedEntities.ApplicationUserId);
      
                      var cartDtoList = new List<CartItemDto>();
                      foreach(var item in cartItems)
                      {
      
                          carDto carDto= new CarDto();
                          cartDto.ItemID = item.ItemID;
                          cartDto.ItemLookupCode = item.ItemLookupCode;
                          cartDto.CategoryID = item.CategoryID;
                          cartDto.DepartmentID = item.DepartmentID;
                          cartDto.itemDescription = item.itemDescription;
                          cartDto.SubDescription3 = item.SubDescription3;
                          cartDto.Quantity = item.Quantity;
                          cartDto.Weight = item.Weight;
                          cartDto.SnapShotPrice = item.SnapShotPrice;
                          cartDto.StoreId = item.StoreId;
                          cartDto.barcode = item.barcode;
                          cartDto.Email = item.Email;
                          cartDto.ItemImage = item.ItemImage;
                          carDtoList.Add(carDto)
                      };
      

      同样,orderItems 也将是列表

      另一个最简单的解决方案是像这样将所有东西放在 foreach 循环中

      foreach(var item in cartItems)
                      {
                          cartDto.ItemID = item.ItemID;
                          cartDto.ItemLookupCode = item.ItemLookupCode;
                          cartDto.CategoryID = item.CategoryID;
                          cartDto.DepartmentID = item.DepartmentID;
                          cartDto.itemDescription = item.itemDescription;
                          cartDto.SubDescription3 = item.SubDescription3;
                          cartDto.Quantity = item.Quantity;
                          cartDto.Weight = item.Weight;
                          cartDto.SnapShotPrice = item.SnapShotPrice;
                          cartDto.StoreId = item.StoreId;
                          cartDto.barcode = item.barcode;
                          cartDto.Email = item.Email;
                          cartDto.ItemImage = item.ItemImage;
                      
                      var items = new OrderItems()
                      {
                          OrderId = id,
                          ItemID = cartDto.ItemID,
                          ItemLookupCode = cartDto.ItemLookupCode,
                          CategoryID = cartDto.CategoryID,
                          DepartmentID = cartDto.DepartmentID,
                          itemDescription = cartDto.itemDescription,
                          SubDescription3 = cartDto.SubDescription3,
                          Quantity = cartDto.Quantity,
                          Weight = cartDto.Weight,
                          SnapShotPrice = cartDto.SnapShotPrice,
                          StoreId = cartDto.StoreId,
                          barcode = cartDto.barcode,
                          Email = cartDto.Email,
                          ItemImage = cartDto.ItemImage,
                      };
                      _orderItemsRepository.Add(items);
                      await _orderItemsRepository.Save();
                      return Ok(id);
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-06-09
        • 2011-12-19
        • 1970-01-01
        • 2014-02-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多