首页 > 解决方案 > 如何在 Asp.net MVC 中更新列表视图模型

问题描述

您好我在 MVC 中的更新记录中遇到问题。我创建了一个列表视图模型,并且我想更新一些记录,但我遇到了错误。请帮我。

这是我的代码:

public async Task<bool> AddPurchase(PurchaseOrderViewModel objModel, List<TableViewModel> tableListDto)
    {
        using (var txn = context.Database.BeginTransaction())
        {
            bool success = true;
            try
            {
                PurchaseOrder purchase1 = new PurchaseOrder();
                purchase1.LoginID = objModel.LoginID;
                purchase1.SupplierID = objModel.SupplierID;
                purchase1.SupplierName = objModel.SupplierName;
                purchase1.LocationID = objModel.LocationID;
                purchase1.Notes = objModel.Notes;
                purchase1.Currency = objModel.Currency;
                purchase1.TotalQuantity = objModel.TotalQuantity;
                purchase1.TotalAmount = objModel.TotalAmount;
                purchase1.TotalVolume = objModel.TotalVolume;
                purchase1.TotalWeight = objModel.TotalWeight;
                purchase1.TotalLandedCost = Convert.ToDecimal(objModel.TotalCost);
                purchase1.TotalOtherCost = objModel.TotalOtherCost;
                purchase1.Date_Of_Purchase = objModel.Date_Of_Purchase;
                purchase1.Due_Date = objModel.Due_Date;
                purchase1.Date_Arrived = objModel.Date_Arrived;
                purchase1.Date_Departed = objModel.Date_Departed;
                purchase1.CreatedBy = objModel.LoginID;
                purchase1.CreatedOn = objModel.CreatedOn;
                purchase1.UpdatedBy = objModel.LoginID;
                purchase1.UpdatedOn = objModel.UpdatedOn;
                purchase1.Status = StatusConstant.Active;
                context.PurchaseOrders.Add(purchase1);
                await context.SaveChangesAsync();
                success = true;

                int latest = purchase1.PurchaseID;

                PO_Landed_Cost cost = new PO_Landed_Cost();
                cost.LoginID = objModel.LoginID;
                cost.PurchaseID = latest;
                cost.Packaging_Costs = objModel.Packaging_Cost;
                cost.Packaging_Costs_Date_Paid = objModel.Packaging_Costs_Date_Paid;
                cost.Inspection_Costs = objModel.Inspection_Cost;
                cost.Inspection_Costs_Date_Paid = objModel.Inspection_Costs_Date_Paid;
                cost.Freight_And_Duty_Tax = objModel.Freight_Cost;
                cost.Freight_And_Duty_Tax_Date_Paid = objModel.Freight_And_Duty_Tax_Date_Paid;
                cost.Other_Costs = objModel.Other_Cost;
                cost.Total_Landed_Cost = objModel.TotalOtherCost;
                context.PO_Landed_Costs.Add(cost);
                context.SaveChanges();

                OrderDetail order = new OrderDetail();
                PO_Landed_Cost_Spread spread1 = new PO_Landed_Cost_Spread();
                List<DataDisplayViewModel> data = new List<DataDisplayViewModel>();

                if (tableListDto != null)
                {
                    foreach (var item in tableListDto)
                    {
                        //First we take all the basic things

                        var a = Convert.ToDecimal(item.Qty);    //Quantity
                        var b = Convert.ToDecimal(purchase1.TotalQuantity); //Total Quantity
                        var e = Convert.ToDecimal(objModel.TotalOtherCost); //TotalOtherCost
                        var g = Convert.ToDecimal(item.Price);  //Price
                        var j = Convert.ToDecimal(item.Volume);  //Volume
                        var l = Convert.ToDecimal(item.Weight);  //Weight
                        var c = Math.Round(Convert.ToDecimal((a / b) * 100), 2); //Total Percent(Quantity)
                        var f = Math.Round(Convert.ToDecimal(((c * e) / a) / 100), 2); // Quantity Unit Price(Indirect Cost)
                        var h = Math.Round(Convert.ToDecimal(f + g), 2);  //Landed Cost Unit Price (Quantity)
                        var i = Math.Round(Convert.ToDecimal(h * a), 2);  //New Total (Quantity)
                        var k = Math.Round(Convert.ToDecimal(a * j), 2); //Total Volume
                        var m = Math.Round(Convert.ToDecimal(a * l), 2); //Total Weight

                        DataDisplayViewModel datalist = new DataDisplayViewModel();
                        datalist.LoginID = objModel.LoginID;
                        datalist.PurchaseID = latest;
                        datalist.Stock_ID = item.Pid;
                        datalist.Stock_Name = item.ProductName;
                        datalist.Quantity = Convert.ToInt32(item.Qty);
                        datalist.Price = Convert.ToDecimal(item.Price);
                        datalist.Amount = Convert.ToDecimal(item.Amount);

                        datalist.Volume = Convert.ToInt32(item.Volume);
                        datalist.Total_Volume = Convert.ToInt32(k);
                        datalist.Weight = Convert.ToInt32(item.Weight);
                        datalist.Total_Weight = Convert.ToInt32(m);
                        datalist.Total_Percent = Convert.ToString(c);
                        datalist.Indirect_Cost_UnitPrice = Convert.ToString(f);
                        datalist.Landed_Cost_UnitPrice = Convert.ToString(h);
                        datalist.New_Amount = i;
                        data.Add(datalist);
}

                    var totalweight = data.Where(x => x.PurchaseID == latest).Select(x => x.Total_Weight).Sum();
                    var totalvolume = data.Where(x => x.PurchaseID == latest).Select(x => x.Total_Volume).Sum();

                    foreach (var item in tableListDto)
                    {
                        var z = Convert.ToInt32(item.Price);
                        var a = Convert.ToInt32(item.Qty);  //Qty
                        var l = Convert.ToDecimal(item.Weight);  //Weight
                        var j = Convert.ToDecimal(item.Volume);  //Volume
                        var d = Math.Round(Convert.ToDecimal(((a * l) / totalweight) * 100), 2); //Total Percent Of Weight
                        var e = Convert.ToInt32(objModel.TotalOtherCost); //Total Other Cost
                        var f = Math.Round(Convert.ToDecimal(((d * e) / a) / 100), 2);

                        var h = Convert.ToDecimal(a + f);  // Landed Cost Unit Price Of Weight
                        var i = Convert.ToString(h * a);  // New Total Of Weight
                        var m = (a * j / totalvolume) * 100;  //Total Percent Of Volume
                        var o = Math.Round(Convert.ToDecimal(((m * e) / a) / 100), 2);  //Unit Price Of Volume
                        var q = Math.Round(Convert.ToDecimal(z + o), 2); // Landed Cost Unit Price Of Volume
                        var r = Convert.ToInt32(q * a); //New Total Of Volume

                        data.Where(x => x.PurchaseID == latest).FirstOrDefault();
                        data.Where(x => x.PurchaseID == latest).FirstOrDefault().Indirect_Cost_WeightUnitPrice = Convert.ToString(f);
                        data.Where(x => x.PurchaseID == latest).FirstOrDefault().Landed_Cost_WeightUnitPrice = Convert.ToString(h);
                        data.Where(x => x.PurchaseID == latest).FirstOrDefault().New_WeightAmount = Convert.ToDecimal(i);
                        data.Where(x => x.PurchaseID == latest).FirstOrDefault().Total_Percent_Volume = Convert.ToString(m);
                        data.Where(x => x.PurchaseID == latest).FirstOrDefault().Indirect_Cost_VolumeUnitPrice = Convert.ToString(o);
                        data.Where(x => x.PurchaseID == latest).FirstOrDefault().Landed_Cost_VolumeUnitPrice = Convert.ToString(q);
                        data.Where(x => x.PurchaseID == latest).FirstOrDefault().New_VolumeAmount = Convert.ToDecimal(r);
                        context.Entry(data).State = EntityState.Added;
                        context.SaveChanges();
}

                    foreach (var item in data)
                    {
                        order.LoginID = objModel.LoginID;
                        order.PurchaseID = item.PurchaseID;
                        order.Stock_ID = item.Stock_ID;
                        order.Quantity = item.Quantity;
                        order.Price = item.Price;
                        order.Amount = item.Amount;
                        order.CreatedBy = objModel.LoginID;
                        order.CreatedOn = objModel.CreatedOn;
                        order.UpdatedBy = objModel.LoginID;
                        order.UpdatedOn = objModel.UpdatedOn;
                        order.Status = StatusConstant.Active;
                        order.Stock_Name = item.Stock_Name;
                        order.Volume = item.Volume;
                        order.Total_Volume = item.Total_Volume;
                        order.Weight = item.Weight;
                        order.Total_Weight = item.Total_Weight;
                        context.OrderDetails.Add(order);
                        context.SaveChanges();


                        spread1.PurchaseID = item.PurchaseID;
                        spread1.OrderID = order.OrderID;
                        spread1.LoginID = item.LoginID;
                        spread1.Total_Percent = item.Total_Percent;
                        spread1.Indirect_Cost_UnitPrice = item.Indirect_Cost_UnitPrice;
                        spread1.Landed_Cost_UnitPrice = item.Landed_Cost_UnitPrice;
                        spread1.New_Amount = item.New_Amount;
                        spread1.Total_Percent_Volume = item.Total_Percent_Volume;
                        spread1.Indirect_Cost_VolumeUnitPrice = item.Indirect_Cost_VolumeUnitPrice;
                        spread1.Landed_Cost_VolumeUnitPrice = item.Landed_Cost_VolumeUnitPrice;
                        spread1.New_VolumeAmount = item.New_VolumeAmount;
                        spread1.Total_Percent_Weight = item.Total_Percent_Weight;
                        spread1.Indirect_Cost_WeightUnitPrice = item.Indirect_Cost_WeightUnitPrice;
                        spread1.Landed_Cost_WeightUnitPrice = item.Landed_Cost_WeightUnitPrice;
                        spread1.New_WeightAmount = item.New_WeightAmount;
                        context.PO_Landed_Cost_Spreads.Add(spread1);
                        context.SaveChanges();
                    }

                }
                else
                {
                    order.LoginID = objModel.LoginID;
                    order.PurchaseID = latest;
                    order.CreatedBy = objModel.LoginID;
                    order.CreatedOn = objModel.CreatedOn;
                    order.UpdatedBy = objModel.LoginID;
                    order.UpdatedOn = objModel.UpdatedOn;
                    order.Status = StatusConstant.Active;
                    context.OrderDetails.Add(order);
                    context.SaveChanges();

                    PO_Landed_Cost_Spread spread = new PO_Landed_Cost_Spread();
                    spread.LoginID = objModel.LoginID;
                    spread.PurchaseID = latest;
                    spread.OrderID = order.OrderID;
                    context.PO_Landed_Cost_Spreads.Add(spread);
                    context.SaveChanges();

                }

                txn.Commit();

            }
            catch (Exception ex)
            {
                txn.Dispose();
                success = false;
            }
            return success;
        };
    }

在这段代码中,我想在首先需要查找一些值然后需要在列表视图模型中更新然后需要在表中更新时更新记录。但我无法做到这一点。请帮助我。

标签: asp.net-mvcasp.net-mvc-4

解决方案


推荐阅读