代码之家  ›  专栏  ›  技术社区  ›  Ken-F

使用MVC/EF汇总购物车中的重复行项目

  •  0
  • Ken-F  · 技术社区  · 7 年前

    我目前正致力于创建一个简单的购物车,根据对表格的调用显示行项目。我主要是利用了这里的基本CRUD,因此我读取一个表,过滤掉用户ID,并检查orderID是否已分配(以避免在购物车中重新显示已订购的商品)。

    一切正常,一切正常,但出于美观原因,我希望处理相同产品(相同ProductID、相同产品名称,但数量不同)汇总到一个位置(订单数量A+订单数量B等)的情况,而不是有多个不同数量的行项目。

    旁注:我提供的是订阅和单次订单(由表格中的布尔值区分),所以请不要让这激怒我。

    LineItems的模型如下所示:

    public class LineItems
    {
        public int                                                      ID                                  { get; set; }
        public string                                                   UserID                              { get; set; }
        public int                                                      ProductID                           { get; set; }
        public string                                                   ProductName                         { get; set; }
        //[Range(1, int.MaxValue, ErrorMessage                            = "Naja... Menge 0 lohnt sich nicht zu liefern...")]
        public int                                                      SubscriptionQuantity                { get; set; }
        public string                                                   SubscriptionCadenceCategory         { get; set; }
        public int                                                      SubscriptionCadenceValue            { get; set; }
        public decimal                                                  SubscriptionPrice                   { get; set; }
        public bool                                                     IsSingleOrder                       { get; set; }
        //[Range(1, int.MaxValue, ErrorMessage                            = "Naja... Menge 0 lohnt sich nicht zu liefern...")]
        public int                                                      SingleOrderQuantity                 { get; set; }
        public decimal                                                  SingleOrderPrice                    { get; set; }
        public decimal                                                  TotalPrice                          { get; set; }
        public int                                                      OrderNumber                         { get; set; }
        public DateTime                                                 UpdatedTimeStampUTC                 { get; set; }
        public string                                                   UpdatedLatitude                     { get; set; }
        public string                                                   UpdatedLongitude                    { get; set; }
        public string                                                   UpdatedLocation                     { get; set; }
    }
    

    以及以下观点:

    <div id="shoppingCart" class="productTableSection row">
            @foreach (var item in Model)
            {
                if (item.IsSingleOrder == false)
                {
                    <div id="shoppingCartSubscriptionLineItemArea" class=" tableArea col-xs-offset-1 col-xs-10 col-sm-offset-1 col-sm-10 col-md-offset-1 col-md-10 col-lg-offset-2 col-lg-8">
                        @Html.HiddenFor(modelItem => item.ID, new { @class = "tableField col-xs-12 col-sm-12 col-md-12 col-lg-12" })
                        <a id="shoppingCartSubscriptionRemoveLink" class="tableField col-xs-1 col-sm-1 col-md-1 col-lg-1" href="#">
                            <i id="shoppingCartSubscriptionRemove" class="fas fa-trash-alt"></i>
                        </a>
                        <a id="shoppingCartSubscriptionLineItemLink" class="tableField col-xs-10 col-sm-10 col-md-10 col-lg-10" href="@Url.Action("ProductSubscription", "freshNclean", new { id = item.ID })">
                            <div id="shoppingCartSubscriptionProductNameField" class="tableField col-xs-7 col-sm-8 col-md-9 col-lg-9">
                                @Html.DisplayFor(modelItem => item.ProductName)
                            </div>
                            <div id="shoppingCartSubscriptionProductPriceField" class="tableField col-xs-5 col-sm-4 col-md-3 col-lg-3">
                                CHF @Html.DisplayFor(modelItem => item.SubscriptionPrice)
                            </div>
                            <div id="shoppingCartSubscriptionProductQuantityField" class="tableField col-xs-4 col-sm-4 col-md-5 col-lg-5">
                                @Html.DisplayFor(modelItem => item.SubscriptionQuantity) x
                            </div>
                            <div id="shoppingCartSubscriptionCadenceValueField" class="tableField col-xs-3 col-sm-2 col-md-2 col-lg-1">
                                alle @Html.DisplayFor(modelItem => item.SubscriptionCadenceValue)
                            </div>
                            <div id="shoppingCartSubscriptionCadenceCategoryField" class="tableField col-xs-5 col-sm-6 col-md-5 col-lg-6">
                                @Html.DisplayFor(modelItem => item.SubscriptionCadenceCategory)
                            </div>
                            <div id="shoppingCartSubscriptionTotalPriceField" class="tableField col-xs-12 col-sm-12 col-md-12 col-lg-12">
                                CHF @Html.DisplayFor(modelItem => item.TotalPrice)
                            </div>
                        </a>
                        <a id="shoppingCartSubscriptionEditLink" class="tableField col-xs-1 col-sm-1 col-md-1 col-lg-1" href="#">
                            <i id="shoppingCartSubscriptionEdit" class="fas fa-edit"></i>
                        </a>
                    </div>
                }
                else
                {
                    <div id="shoppingCartSingleOrderLineItemArea" class=" tableArea col-xs-offset-1 col-xs-10 col-sm-offset-1 col-sm-10 col-md-offset-1 col-md-10 col-lg-offset-2 col-lg-8">
                        @Html.HiddenFor(modelItem => item.ID, new { @class = "tableField col-xs-12 col-sm-12 col-md-12 col-lg-12" })
                        <a id="shoppingCartSingleOrderRemoveLink" class="tableField col-xs-1 col-sm-1 col-md-1 col-lg-1" href="#">
                            <i id="shoppingCartSingleOrderRemove" class="fas fa-trash-alt"></i>
                        </a>
                        <a id="shoppingCartSingleOrderLineItemLink" class="tableField col-xs-10 col-sm-10 col-md-10 col-lg-10" href="@Url.Action("ProductSingleOrder", "freshNclean", new { id = item.ID })">
                            <div id="shoppingCartSingleOrderProductNameField" class="tableField col-xs-7 col-sm-8 col-md-9 col-lg-9">
                                @Html.DisplayFor(modelItem => item.ProductName)
                            </div>
                            <div id="shoppingCartSingleOrderProductPriceField" class="tableField col-xs-5 col-sm-4 col-md-3 col-lg-3">
                                CHF @Html.DisplayFor(modelItem => item.SingleOrderPrice)
                            </div>
                            <div id="shoppingCartSingleOrderProductQuantityField" class="tableField col-xs-12 col-sm-12 col-md-12 col-lg-12">
                                @Html.DisplayFor(modelItem => item.SingleOrderQuantity) x
                            </div>
                            <div id="shoppingCartSingleOrderTotalPriceField" class="tableField col-xs-12 col-sm-12 col-md-12 col-lg-12">
                                CHF @Html.DisplayFor(modelItem => item.TotalPrice)
                            </div>
                        </a>
                        <a id="shoppingCartSingleOrderEditLink" class="tableField col-xs-1 col-sm-1 col-md-1 col-lg-1" href="#">
                            <i id="shoppingCartSingleOrderEdit" class="fas fa-edit"></i>
                        </a>
                    </div>
                }
            }
        </div>
    

    最后,控制员:

    // GET: /freshNclean/ShoppingCart
        [Authorize]
        public ActionResult ShoppingCart(Orders model)
        {
            // define variables
            var userID                                                  = User.Identity.GetUserId();
            DateTime nowUTC                                             = DateTime.Now.ToUniversalTime();
            DateTime nowLocal                                           = DateTime.Now.ToLocalTime();                                           
            // track user activity: get method is restricted to activity name and timestamp
            var LOADED                                                  = new UserActivities
            {
                UserID                                                  = userID,
                ActivityName                                            = "ShoppingCart_Loaded",
                ActivityTimeStampUTC                                    = nowUTC,
                ActivityLatitude                                        = "n/a",
                ActivityLongitude                                       = "n/a",
                ActivityLocation                                        = "n/a"
            };
            DATADB.UserActivityList.Add(LOADED);
            DATADB.SaveChanges();
            return View(DATADB.LineItemList.Where(x => x.UserID == userID).Where(x => x.OrderNumber == 0).ToList());
        }
    
    1 回复  |  直到 7 年前
        1
  •  0
  •   Ken-F    7 年前

    我终于自己弄明白了——不是真的。我所做的是改变了在购物车上写作的方式。但最终的结果是有效的。