【问题标题】:MVC method cycles through array but only displays values for last item in arrayMVC 方法循环遍历数组,但仅显示数组中最后一项的值
【发布时间】:2020-03-11 21:37:50
【问题描述】:

我有一个控制器方法循环遍历我的“站点”数据库表,但目前它只发布数组中最后一项的内容,并且发布的次数与数据库中的站点相同。

这是我的看法

  @foreach (Site s in sites)
        {

            <tr style="color:black">
                @foreach (var col in Model.OffReportColumns)
                {
                    <th>@col</th>
                }
            </tr>

            foreach (var row in Model.OffReportRows)
            {
                <tr style="color:black">
                    @foreach (var cell in row)
                    {
                        <td>@cell</td>
                    }
                </tr>
            }


            foreach (var row in Model.OffReporTotal)
            {
                <tr style="font-size: 20px">
                    @foreach (var cell in row)
                    {
                        <td>@cell</td>
                    }
                </tr>

            }
        }

这是我的控制器

 namespace PIC_Program_1._0.Controllers
{
    public class SummaryReportController : Controller
    {
        public ActionResult Index()
        {
            var model = GetSummaryReport();
            return View("Index", model);   
        }

        private SummaryReportModel GetSummaryReport()
        {
            PIC_Program_1_0Context db = new PIC_Program_1_0Context();
            var items = db.Items.Where(x => x.deleted == false).ToList();
            var components = db.Components.Where(x => x.deleted == false).ToList();
            var parts = db.Parts.Where(x => x.deleted == false).ToList();
            List<Site> sites = db.Sites.ToList();

            //variables
            float partcost = 0;
            float compcost = 0;
            float complastcost = 0;
            float compretail = 0;
            float itemcost = 0;
            float itemlastcost = 0;
            float itemretail = 0;
            float opartcost = 0;
            float ocompcost = 0;
            float ocomplastcost = 0;
            float ocompretail = 0;
            float oitemcost = 0;
            float oitemlastcost = 0;
            float oitemretail = 0;
            float lcompcost = 0;
            float litemcost = 0;
            float locompcost = 0;
            float loitemcost = 0;
            float tools = 0;
            float otools = 0;
            float total = 0;
            float ltotal = 0;
            float ostotal = 0;
            float ofltotal = 0;
            float pc6 = 0;
            float pr6 = 0;
            float pc7 = 0;
            float pr7 = 0;
            float pc8 = 0;
            float pr8 = 0;
            float pc9 = 0;
            float pr9 = 0;
            float opc6 = 0;
            //float opr6 = 0;
            float opc7 = 0;
            //float opr7 = 0;
            float opc8 = 0;
            //float opr8 = 0;
            float opc9 = 0;
            //float opr9 = 0;
            float pro = 0;
            float pco = 0;
            float plo = 0;
            //float opro = 0;
            float opco = 0;
            //float oplo = 0;

            //osi items
            float[] osiItemCost = new float[sites.Count + 1];
            float[] osiLoItemCost = new float[sites.Count + 1];
            float[] osiItemLastCost = new float[sites.Count + 1];
            //float[] osiItemRetail;

            //osi components
            float[] osiCompCost = new float[sites.Count + 1];
            float[] osiLoCompCost = new float[sites.Count + 1];
            float[] osiCompLastCost = new float[sites.Count + 1];
            //float[] osiCompRetail;

            //osi parts
            float[] osiOpc6 = new float[sites.Count + 1];
            float[] osiOpr6 = new float[sites.Count + 1];
            float[] osiOpc7 = new float[sites.Count + 1];
            float[] osiOpr7 = new float[sites.Count + 1];
            float[] osiOpc8 = new float[sites.Count + 1];
            float[] osiOpr8 = new float[sites.Count + 1];
            float[] osiOpc9 = new float[sites.Count + 1];
            float[] osiOpr9 = new float[sites.Count + 1];
            float[] osiOpco = new float[sites.Count + 1];
            float[] osiOpro = new float[sites.Count + 1];
            float[] osiOplo = new float[sites.Count + 1];

            //OSI TOTALS
            float[] osiPartCost = new float[sites.Count + 1];
            float[] osiTools = new float[sites.Count + 1];
            float[] osiTotal = new float[sites.Count + 1];
            float[] osiFltotal = new float[sites.Count + 1];
            //float[] osiPartCost;


            foreach (var p in parts)
            {
                if (p.PartID.StartsWith("6"))
                {
                    pc6 += p.On_Hand * p.AverageCostCdn;
                    pr6 += p.On_Hand * p.PricePerUnit;

                    //opc6 += p.OffSiteCount * p.AverageCostCdn;
                    //opr6 += p.OffSiteCount * p.PricePerUnit;
                }

                else if (p.PartID.StartsWith("7"))
                {
                    pc7 += p.On_Hand * p.AverageCostCdn;
                    pr7 += p.On_Hand * p.PricePerUnit;

                    //opc7 += p.OffSiteCount * p.AverageCostCdn;
                    //opr7 += p.OffSiteCount * p.PricePerUnit;
                }

                else if (p.PartID.StartsWith("8"))
                {
                    pc8 += p.On_Hand * p.AverageCostCdn;
                    pr8 += p.On_Hand * p.PricePerUnit;

                    //opc8 += p.OffSiteCount * p.AverageCostCdn;
                    //opr8 += p.OffSiteCount * p.PricePerUnit;
                }

                else if (p.PartID.StartsWith("9"))
                {
                    pc9 += p.On_Hand * p.AverageCostCdn;
                    pr9 += p.On_Hand * p.PricePerUnit;

                    //opc9 += p.OffSiteCount * p.AverageCostCdn;
                    //opr9 += p.OffSiteCount * p.PricePerUnit;
                }

                else
                {
                    pco += p.On_Hand * p.AverageCostCdn;
                    pro += p.On_Hand * p.PricePerUnit;

                    //opco += p.OffSiteCount * p.AverageCostCdn;
                    //opro += p.OffSiteCount * p.PricePerUnit;

                    plo += p.On_Hand * p.LastCostCdn;
                    //oplo += p.OffSiteCount * p.LastCostCdn;
                }
            }

            foreach (var c in components)
            {
                // New Average Cost Valuation = (pc6 + pc7 + pc8)
                partcost = pc6 + pc7 + pc8;
                opartcost = opc6 + opc7 + opc8;
                tools = pc9 + pco;
                otools = opc9 + opco;

                //Add Labour
                compcost += c.On_Hand * c.cost(1, false, false);
                lcompcost += c.On_Hand * c.cost(1, false, true);

                complastcost += c.cost(c.On_Hand, true, false);
                compretail += c.On_Hand * c.PricePerUnit;

                ocompcost += c.OffSiteCount * c.cost(1, false, false);
                locompcost += c.OffSiteCount * c.cost(1, false, true);

                ocomplastcost += c.cost(c.OffSiteCount, true, false);
                ocompretail += c.OffSiteCount * c.PricePerUnit;
            }

            foreach (var i in items)
            {
                itemcost += i.On_Hand * i.cost(1, false, false);
                litemcost += i.On_Hand * i.cost(1, false, true);

                itemlastcost += i.cost(i.On_Hand, true, false);
                itemretail += i.On_Hand * (float)i.PricePerUnit;

                oitemcost += i.OffSiteCount * i.cost(1, false, false);
                loitemcost += i.OffSiteCount * i.cost(1, false, true);

                oitemlastcost += i.cost(i.OffSiteCount, true, false);
                oitemretail += i.OffSiteCount * (float)i.PricePerUnit;

                //on Site Parts Total valu 
                total = partcost + compcost + itemcost;
                ltotal = partcost + lcompcost + litemcost;

                //Off Site Parts Total valu 
                ostotal = opartcost + ocompcost + oitemcost;
                ofltotal = opartcost + locompcost + loitemcost;
            }


            foreach (Site s in sites)
            {
                foreach (OffSiteItemDetails d in s.ItemDetails)
                {

                    if (d.itemID != null)
                    {

                        osiItemCost[s.ID] = d.qty * db.Items.Where(x => x.ID == d.itemID).FirstOrDefault().cost(1, false, false);
                        osiLoItemCost[s.ID] += d.qty * db.Items.Where(x => x.ID == d.itemID).FirstOrDefault().cost(1, false, true);

                        osiItemLastCost[s.ID] += db.Items.Where(x => x.ID == d.itemID).FirstOrDefault().cost(d.qty, true, false);
                        //osiItemRetail[s.ID] += d.qty * db.Items.Where(x => x.ID == d.itemID).FirstOrDefault().PricePerUnit;

                    }
                    if (d.componentID != null)
                    {
                        osiPartCost[s.ID] = osiOpc6[s.ID] + osiOpc7[s.ID] + osiOpc8[s.ID];
                        osiTools[s.ID] = osiOpc9[s.ID] + osiOpco[s.ID];

                        osiCompCost[s.ID] = d.qty * db.Components.Where(x => x.ID == d.componentID).FirstOrDefault().cost(1, false, false);
                        osiLoCompCost[s.ID] += d.qty * db.Components.Where(x => x.ID == d.componentID).FirstOrDefault().cost(1, false, true);

                        osiCompLastCost[s.ID] += db.Components.Where(x => x.ID == d.componentID).FirstOrDefault().cost(d.qty, true, false);
                        //osiCompRetail[s.ID] += d.qty * db.Components.Where(x => x.ID == d.componentID).FirstOrDefault().PricePerUnit;
                    }
                    if (d.partID != null)
                    {
                        if (db.Parts.Where(x => x.ID == d.partID).FirstOrDefault().PartID.StartsWith("6"))                     
                        {
                            osiOpc6[s.ID] += d.qty * db.Parts.Where(x => x.ID == d.partID).FirstOrDefault().AverageCostCdn;
                            osiOpr6[s.ID] += d.qty * db.Parts.Where(x => x.ID == d.partID).FirstOrDefault().PricePerUnit;
                        }
                        else if (db.Parts.Where(x => x.ID == d.partID).FirstOrDefault().PartID.StartsWith("7"))
                        {
                            osiOpc7[s.ID] += d.qty * db.Parts.Where(x => x.ID == d.partID).FirstOrDefault().AverageCostCdn;
                            osiOpr7[s.ID] += d.qty * db.Parts.Where(x => x.ID == d.partID).FirstOrDefault().PricePerUnit;
                        }
                        else if (db.Parts.Where(x => x.ID == d.partID).FirstOrDefault().PartID.StartsWith("8"))
                        {
                            osiOpc8[s.ID] += d.qty * db.Parts.Where(x => x.ID == d.partID).FirstOrDefault().AverageCostCdn;
                            osiOpr8[s.ID] += d.qty * db.Parts.Where(x => x.ID == d.partID).FirstOrDefault().PricePerUnit;
                        }
                        else if (db.Parts.Where(x => x.ID == d.partID).FirstOrDefault().PartID.StartsWith("9"))
                        {
                            osiOpc9[s.ID] += d.qty * db.Parts.Where(x => x.ID == d.partID).FirstOrDefault().AverageCostCdn;
                            osiOpr9[s.ID] += d.qty * db.Parts.Where(x => x.ID == d.partID).FirstOrDefault().PricePerUnit;
                        }
                        else
                        {
                            osiOpco[s.ID] += d.qty * db.Parts.Where(x => x.ID == d.partID).FirstOrDefault().AverageCostCdn;
                            osiOpro[s.ID] += d.qty * db.Parts.Where(x => x.ID == d.partID).FirstOrDefault().PricePerUnit;

                            osiOplo[s.ID] += d.qty * db.Parts.Where(x => x.ID == d.partID).FirstOrDefault().LastCostCdn;
                        }

                    }

                    //Off Site Parts Total valu
                    osiTotal[s.ID] = osiPartCost[s.ID] + osiCompCost[s.ID] + osiItemCost[s.ID];
                    osiFltotal[s.ID] = osiPartCost[s.ID] + osiLoCompCost[s.ID] + osiLoItemCost[s.ID];

                }
            }

            var model = new SummaryReportModel()
            {
                Title = "Valuation",
                ReportTitle = "Valuation - Summary Report",
                OffReportTitle = "Valuation - Off Site Parts"
            };

            model.Tital = new List<List<string>>()
            {
                 new List<string>()
                 {
                      "Valuation - Main Inventory",
                 },
            };
            model.ValuationColumns = new List<string>()
            {
                "",
                "",
                "",
                "Average Cost",
                "",
                "",
                "Average Cost (With labour)"
            };
            model.ValuationRows = new List<List<string>>()
            {
                new List<string>()
                {
                    "Parts",
                    "",
                    "",
                    partcost.ToString("C2"),
                    "",
                    "",
                    partcost.ToString("C2")
                },
                new List<string>()
                {
                    "",
                    "600000 series",
                    pc6.ToString("C2"),
                    "",
                    "600000 series",
                    pc6.ToString("C2"),
                    ""
                },
                new List<string>()
                {
                    "",
                    "700000 series",
                    pc7.ToString("C2"),
                    "",
                    "700000 series",
                    pc7.ToString("C2"),
                    ""
                },
                new List<string>()
                {
                    "",
                    "800000 series",
                    pc8.ToString("C2"),
                    "",
                    "800000 series",
                    pc8.ToString("C2"),
                    ""
                },
                new List<string>()
                {
                    "Tools",
                    "",
                    "",
                    tools.ToString("C2"),
                    "",
                    "",
                    tools.ToString("C2")
                },
                new List<string>()
                {
                    "",
                    "900000 series",
                    pc9.ToString("C2"),
                    "",
                    "900000 series",
                    pc9.ToString("C2"),
                    ""
                },
                new List<string>()
                {
                    "",
                    "Other",
                    pco.ToString("C2"),
                    "",
                    "Other",
                    pco.ToString("C2"),
                    ""
                },
                new List<string>()
                {
                    "Components",
                    "",
                    "",
                    compcost.ToString("C2"),
                    "",
                    "",
                    lcompcost.ToString("C2")
                },
                new List<string>()
                {
                    "Items",
                    "",
                    "",
                    itemcost.ToString("C2"),
                    "",
                    "",
                    litemcost.ToString("C2")
                },
        };

            //totlal class

            model.Total = new List<List<string>>()
            {
                 new List<string>()
              {
                    "Total",
                    "",
                    "",
                    total.ToString("C2"),
                    "",
                    "",
                    ltotal.ToString("C2")
                },
            };

            model.SecondTital = new List<List<string>>()
            {
                 new List<string>()
                 {
                  "Valuation - Off Site Parts"
                 },
            };

            List<SummaryReportModel> a = new List<SummaryReportModel>(); // this is what you'll return to the view

            foreach (Site s in sites)
            {
             SummaryReportModel y = new SummaryReportModel();
             foreach (OffSiteItemDetails d in s.ItemDetails)
             {           
            y.OffReportColumns = new List<string>()
            {
                s.Name,
                "",
                "",
                "Average Cost",
                "",
                "",
                "Average Cost (With labour)"
            };
              y.OffReportRows = new List<List<string>>()
            {

                new List<string>()
                {
                    "Parts",
                    "",
                    "",
                    osiPartCost[s.ID].ToString("C2"),
                    "",
                    "",
                    osiPartCost[s.ID].ToString("C2")
                },
                new List<string>()
                {
                    "",
                    "600000 series",
                    osiOpc6[s.ID].ToString("C2"),
                    "",
                    "600000 series",
                    osiOpc6[s.ID].ToString("C2"),
                    ""
                },
                new List<string>()
                {
                    "",
                    "700000 series",
                    osiOpc7[s.ID].ToString("C2"),
                    "",
                    "700000 series",
                    osiOpc7[s.ID].ToString("C2"),
                    ""
                },
                new List<string>()
                {
                    "",
                    "800000 series",
                    osiOpc8[s.ID].ToString("C2"),
                    "",
                    "800000 series",
                    osiOpc8[s.ID].ToString("C2"),
                    ""
                },
                new List<string>()
                {
                    "Tools",
                    "",
                    "",
                    osiTools[s.ID].ToString("C2"),
                     "",
                     "",
                    osiTools[s.ID].ToString("C2"),

                },
                new List<string>()
                {
                    "",
                    "900000 series",
                    osiOpc9[s.ID].ToString("C2"),
                    "",
                    "900000 series",
                    osiOpc9[s.ID].ToString("C2"),
                    ""
                },
                new List<string>()
                {
                    "",
                    "Other",
                    osiOpco[s.ID].ToString("C2"),
                    "",
                    "Other",
                    osiOpco[s.ID].ToString("C2"),
                    ""
                },
                new List<string>()
                {
                    "Components",
                    "",
                    "",
                    osiCompCost[s.ID].ToString("C2"),
                    "",
                    "",
                    osiLoCompCost[s.ID].ToString("C2")
                },
                new List<string>()
                {
                    "Items",
                    "",
                    "",
                    osiItemCost[s.ID].ToString("C2"),
                    "",
                    "",
                    osiLoItemCost[s.ID].ToString("C2")
                },
            };
            y.OffReporTotal = new List<List<string>>()
            {
                 new List<string>()
              {
                    "Total",
                    "",
                    "",
                    osiTotal[s.ID].ToString("C2"),
                    "",
                    "",
                    osiFltotal[s.ID].ToString("C2")
                },
            };

       }
        a.Add(y);
 }

            //return View(a);

            model.osiGrandTotal = new List<List<string>>()
            {
                 new List<string>()
              {
                    "OSI Grand Total",
                    "",
                    "",
                    ostotal.ToString("C2"),
                    "",
                    "",
                    ofltotal.ToString("C2")
                },
            };


            return model;
        }
    }
}

这是我的“站点”和“OffSiteItemDetails”表的一部分,用于显示结构

网站数据库

OffSiteItemDetails 数据库

我希望它循环并发布每个站点的值(它通过 (s.ID) 执行此操作。)它当前循环但它只是发布最后一个 s.Id(站点 ID)的数据表,它会这样做 5 次(有 5 个站点)。我希望它在每个站点循环时分开并发布数据,我只是不知道该怎么做

这是我的模型类

 public class SummaryReportModel
    {
        public string Title { get; set; }
        public string ReportTitle { get; set; }
        public string OffReportTitle { get; set; }
        public List<string> ValuationColumns { get; set; }
        public List<string> OffReportColumns { get; set; }
        public List<List<string>> ValuationRows { get; set; }
        public List<List<string>> OffReportRows { get; set; }
        public List<List<string>> Total { get; set; }
        public List<List<string>> OffReporTotal { get; set; }
        public List<List<string>> Tital { get; set; }
        public List<List<string>> SecondTital { get; set; }
        public List<List<string>> osiGrandTotal { get; set; }
    }

【问题讨论】:

  • 您是否进行了分析以确保您的“网站”数据在到达数据修饰方法之前是正确的?
  • @FrankThomas 是的,我有。这是正确的.. 我只是不知道如何为 5 个站点创建 5 个表,而不是为数组中的最后一个站点创建 5 个表
  • 你能发布模型吗?我怀疑您将同一属性的值设置了五次。循环中的每次迭代都需要有自己的对象。例如,我希望在您的代码中看到带有 List x...的 obj_A,您应该有 foreach(var item in myCollection){ v​​ar y = new property;//set values then...obj_a.x.添加(y)}
  • “它当前循环,但它只发布最后一个 s.Id 的数据”不要为每个站点初始化 model.OffReportColumnsmodel.OffReportRows,而是使用 model.OffReportRows.Add(...)。并删除视图中的foreach站点
  • @BillRuhl 这不是问题,我已经测试过了。我很确定问题是因为在循环完成之前我不会“返回模型”。到那时,这些值将等于数组中的最后一个值。我只是不确定如何在每个循环后返回它

标签: c# asp.net-mvc linq


【解决方案1】:

在视图中,您需要将模型声明为列表

@model List<PIC_Program_1._0.Models.SummaryReportModel>

您的控制器应如下所示:

        public ActionResult Index()
    {
        return View("Index", GetSummaryReport());
    }

    private List<SummaryReportModel> GetSummaryReport()
    {
        PIC_Program_1_0Context db = new PIC_Program_1_0Context();
        var items = db.Items.Where(x => x.deleted == false).ToList();
        var components = db.Components.Where(x => x.deleted == false).ToList();
        var parts = db.Parts.Where(x => x.deleted == false).ToList();
        List<Site> sites = db.Sites.ToList();

        //variables
        float partcost = 0;
        float compcost = 0;
        float complastcost = 0;
        float compretail = 0;
        float itemcost = 0;
        float itemlastcost = 0;
        float itemretail = 0;
        float opartcost = 0;
        float ocompcost = 0;
        float ocomplastcost = 0;
        float ocompretail = 0;
        float oitemcost = 0;
        float oitemlastcost = 0;
        float oitemretail = 0;
        float lcompcost = 0;
        float litemcost = 0;
        float locompcost = 0;
        float loitemcost = 0;
        float tools = 0;
        float otools = 0;
        float total = 0;
        float ltotal = 0;
        float ostotal = 0;
        float ofltotal = 0;
        float pc6 = 0;
        float pr6 = 0;
        float pc7 = 0;
        float pr7 = 0;
        float pc8 = 0;
        float pr8 = 0;
        float pc9 = 0;
        float pr9 = 0;
        float opc6 = 0;
        //float opr6 = 0;
        float opc7 = 0;
        //float opr7 = 0;
        float opc8 = 0;
        //float opr8 = 0;
        float opc9 = 0;
        //float opr9 = 0;
        float pro = 0;
        float pco = 0;
        float plo = 0;
        //float opro = 0;
        float opco = 0;
        //float oplo = 0;

        //osi items
        float[] osiItemCost = new float[sites.Count + 1];
        float[] osiLoItemCost = new float[sites.Count + 1];
        float[] osiItemLastCost = new float[sites.Count + 1];
        //float[] osiItemRetail;

        //osi components
        float[] osiCompCost = new float[sites.Count + 1];
        float[] osiLoCompCost = new float[sites.Count + 1];
        float[] osiCompLastCost = new float[sites.Count + 1];
        //float[] osiCompRetail;

        //osi parts
        float[] osiOpc6 = new float[sites.Count + 1];
        float[] osiOpr6 = new float[sites.Count + 1];
        float[] osiOpc7 = new float[sites.Count + 1];
        float[] osiOpr7 = new float[sites.Count + 1];
        float[] osiOpc8 = new float[sites.Count + 1];
        float[] osiOpr8 = new float[sites.Count + 1];
        float[] osiOpc9 = new float[sites.Count + 1];
        float[] osiOpr9 = new float[sites.Count + 1];
        float[] osiOpco = new float[sites.Count + 1];
        float[] osiOpro = new float[sites.Count + 1];
        float[] osiOplo = new float[sites.Count + 1];

        //OSI TOTALS
        float[] osiPartCost = new float[sites.Count + 1];
        float[] osiTools = new float[sites.Count + 1];
        float[] osiTotal = new float[sites.Count + 1];
        float[] osiFltotal = new float[sites.Count + 1];
        //float[] osiPartCost;


        foreach (var p in parts)
        {
            if (p.PartID.StartsWith("6"))
            {
                pc6 += p.On_Hand * p.AverageCostCdn;
                pr6 += p.On_Hand * p.PricePerUnit;

                //opc6 += p.OffSiteCount * p.AverageCostCdn;
                //opr6 += p.OffSiteCount * p.PricePerUnit;
            }

            else if (p.PartID.StartsWith("7"))
            {
                pc7 += p.On_Hand * p.AverageCostCdn;
                pr7 += p.On_Hand * p.PricePerUnit;

                //opc7 += p.OffSiteCount * p.AverageCostCdn;
                //opr7 += p.OffSiteCount * p.PricePerUnit;
            }

            else if (p.PartID.StartsWith("8"))
            {
                pc8 += p.On_Hand * p.AverageCostCdn;
                pr8 += p.On_Hand * p.PricePerUnit;

                //opc8 += p.OffSiteCount * p.AverageCostCdn;
                //opr8 += p.OffSiteCount * p.PricePerUnit;
            }

            else if (p.PartID.StartsWith("9"))
            {
                pc9 += p.On_Hand * p.AverageCostCdn;
                pr9 += p.On_Hand * p.PricePerUnit;

                //opc9 += p.OffSiteCount * p.AverageCostCdn;
                //opr9 += p.OffSiteCount * p.PricePerUnit;
            }

            else
            {
                pco += p.On_Hand * p.AverageCostCdn;
                pro += p.On_Hand * p.PricePerUnit;

                //opco += p.OffSiteCount * p.AverageCostCdn;
                //opro += p.OffSiteCount * p.PricePerUnit;

                plo += p.On_Hand * p.LastCostCdn;
                //oplo += p.OffSiteCount * p.LastCostCdn;
            }
        }

        foreach (var c in components)
        {
            // New Average Cost Valuation = (pc6 + pc7 + pc8)
            partcost = pc6 + pc7 + pc8;
            opartcost = opc6 + opc7 + opc8;
            tools = pc9 + pco;
            otools = opc9 + opco;

            //Add Labour
            compcost += c.On_Hand * c.cost(1, false, false);
            lcompcost += c.On_Hand * c.cost(1, false, true);

            complastcost += c.cost(c.On_Hand, true, false);
            compretail += c.On_Hand * c.PricePerUnit;

            ocompcost += c.OffSiteCount * c.cost(1, false, false);
            locompcost += c.OffSiteCount * c.cost(1, false, true);

            ocomplastcost += c.cost(c.OffSiteCount, true, false);
            ocompretail += c.OffSiteCount * c.PricePerUnit;
        }

        foreach (var i in items)
        {
            itemcost += i.On_Hand * i.cost(1, false, false);
            litemcost += i.On_Hand * i.cost(1, false, true);

            itemlastcost += i.cost(i.On_Hand, true, false);
            itemretail += i.On_Hand * (float)i.PricePerUnit;

            oitemcost += i.OffSiteCount * i.cost(1, false, false);
            loitemcost += i.OffSiteCount * i.cost(1, false, true);

            oitemlastcost += i.cost(i.OffSiteCount, true, false);
            oitemretail += i.OffSiteCount * (float)i.PricePerUnit;

            //on Site Parts Total valu 
            total = partcost + compcost + itemcost;
            ltotal = partcost + lcompcost + litemcost;

            //Off Site Parts Total valu 
            ostotal = opartcost + ocompcost + oitemcost;
            ofltotal = opartcost + locompcost + loitemcost;
        }


        foreach (Site s in sites)
        {
            foreach (OffSiteItemDetails d in s.ItemDetails)
            {

                if (d.itemID != null)
                {

                    osiItemCost[s.ID] = d.qty * db.Items.Where(x => x.ID == d.itemID).FirstOrDefault().cost(1, false, false);
                    osiLoItemCost[s.ID] += d.qty * db.Items.Where(x => x.ID == d.itemID).FirstOrDefault().cost(1, false, true);

                    osiItemLastCost[s.ID] += db.Items.Where(x => x.ID == d.itemID).FirstOrDefault().cost(d.qty, true, false);
                    //osiItemRetail[s.ID] += d.qty * db.Items.Where(x => x.ID == d.itemID).FirstOrDefault().PricePerUnit;

                }
                if (d.componentID != null)
                {
                    osiPartCost[s.ID] = osiOpc6[s.ID] + osiOpc7[s.ID] + osiOpc8[s.ID];
                    osiTools[s.ID] = osiOpc9[s.ID] + osiOpco[s.ID];

                    osiCompCost[s.ID] = d.qty * db.Components.Where(x => x.ID == d.componentID).FirstOrDefault().cost(1, false, false);
                    osiLoCompCost[s.ID] += d.qty * db.Components.Where(x => x.ID == d.componentID).FirstOrDefault().cost(1, false, true);

                    osiCompLastCost[s.ID] += db.Components.Where(x => x.ID == d.componentID).FirstOrDefault().cost(d.qty, true, false);
                    //osiCompRetail[s.ID] += d.qty * db.Components.Where(x => x.ID == d.componentID).FirstOrDefault().PricePerUnit;
                }
                if (d.partID != null)
                {
                    if (db.Parts.Where(x => x.ID == d.partID).FirstOrDefault().PartID.StartsWith("6"))
                    {
                        osiOpc6[s.ID] += d.qty * db.Parts.Where(x => x.ID == d.partID).FirstOrDefault().AverageCostCdn;
                        osiOpr6[s.ID] += d.qty * db.Parts.Where(x => x.ID == d.partID).FirstOrDefault().PricePerUnit;
                    }
                    else if (db.Parts.Where(x => x.ID == d.partID).FirstOrDefault().PartID.StartsWith("7"))
                    {
                        osiOpc7[s.ID] += d.qty * db.Parts.Where(x => x.ID == d.partID).FirstOrDefault().AverageCostCdn;
                        osiOpr7[s.ID] += d.qty * db.Parts.Where(x => x.ID == d.partID).FirstOrDefault().PricePerUnit;
                    }
                    else if (db.Parts.Where(x => x.ID == d.partID).FirstOrDefault().PartID.StartsWith("8"))
                    {
                        osiOpc8[s.ID] += d.qty * db.Parts.Where(x => x.ID == d.partID).FirstOrDefault().AverageCostCdn;
                        osiOpr8[s.ID] += d.qty * db.Parts.Where(x => x.ID == d.partID).FirstOrDefault().PricePerUnit;
                    }
                    else if (db.Parts.Where(x => x.ID == d.partID).FirstOrDefault().PartID.StartsWith("9"))
                    {
                        osiOpc9[s.ID] += d.qty * db.Parts.Where(x => x.ID == d.partID).FirstOrDefault().AverageCostCdn;
                        osiOpr9[s.ID] += d.qty * db.Parts.Where(x => x.ID == d.partID).FirstOrDefault().PricePerUnit;
                    }
                    else
                    {
                        osiOpco[s.ID] += d.qty * db.Parts.Where(x => x.ID == d.partID).FirstOrDefault().AverageCostCdn;
                        osiOpro[s.ID] += d.qty * db.Parts.Where(x => x.ID == d.partID).FirstOrDefault().PricePerUnit;

                        osiOplo[s.ID] += d.qty * db.Parts.Where(x => x.ID == d.partID).FirstOrDefault().LastCostCdn;
                    }

                }

                //Off Site Parts Total valu
                osiTotal[s.ID] = osiPartCost[s.ID] + osiCompCost[s.ID] + osiItemCost[s.ID];
                osiFltotal[s.ID] = osiPartCost[s.ID] + osiLoCompCost[s.ID] + osiLoItemCost[s.ID];

            }
        }

        // I moved this inside the foreach (Site s in sites) loop
        //        var model = new SummaryReportModel()
        //        {
        //            Title = "Valuation",
        //            ReportTitle = "Valuation - Summary Report",
        //            OffReportTitle = "Valuation - Off Site Parts"
        //        };

        //        model.Tital = new List<List<string>>()
        //    {
        //         new List<string>()
        //         {
        //              "Valuation - Main Inventory",
        //         },
        //    };
        //        model.ValuationColumns = new List<string>()
        //    {
        //        "",
        //        "",
        //        "",
        //        "Average Cost",
        //        "",
        //        "",
        //        "Average Cost (With labour)"
        //    };
        //        model.ValuationRows = new List<List<string>>()
        //    {
        //        new List<string>()
        //        {
        //            "Parts",
        //            "",
        //            "",
        //            partcost.ToString("C2"),
        //            "",
        //            "",
        //            partcost.ToString("C2")
        //        },
        //        new List<string>()
        //        {
        //            "",
        //            "600000 series",
        //            pc6.ToString("C2"),
        //            "",
        //            "600000 series",
        //            pc6.ToString("C2"),
        //            ""
        //        },
        //        new List<string>()
        //        {
        //            "",
        //            "700000 series",
        //            pc7.ToString("C2"),
        //            "",
        //            "700000 series",
        //            pc7.ToString("C2"),
        //            ""
        //        },
        //        new List<string>()
        //        {
        //            "",
        //            "800000 series",
        //            pc8.ToString("C2"),
        //            "",
        //            "800000 series",
        //            pc8.ToString("C2"),
        //            ""
        //        },
        //        new List<string>()
        //        {
        //            "Tools",
        //            "",
        //            "",
        //            tools.ToString("C2"),
        //            "",
        //            "",
        //            tools.ToString("C2")
        //        },
        //        new List<string>()
        //        {
        //            "",
        //            "900000 series",
        //            pc9.ToString("C2"),
        //            "",
        //            "900000 series",
        //            pc9.ToString("C2"),
        //            ""
        //        },
        //        new List<string>()
        //        {
        //            "",
        //            "Other",
        //            pco.ToString("C2"),
        //            "",
        //            "Other",
        //            pco.ToString("C2"),
        //            ""
        //        },
        //        new List<string>()
        //        {
        //            "Components",
        //            "",
        //            "",
        //            compcost.ToString("C2"),
        //            "",
        //            "",
        //            lcompcost.ToString("C2")
        //        },
        //        new List<string>()
        //        {
        //            "Items",
        //            "",
        //            "",
        //            itemcost.ToString("C2"),
        //            "",
        //            "",
        //            litemcost.ToString("C2")
        //        },
        //};

        //        //totlal class

        //        model.Total = new List<List<string>>()
        //    {
        //         new List<string>()
        //      {
        //            "Total",
        //            "",
        //            "",
        //            total.ToString("C2"),
        //            "",
        //            "",
        //            ltotal.ToString("C2")
        //        },
        //    };

        //        model.SecondTital = new List<List<string>>()
        //    {
        //         new List<string>()
        //         {
        //          "Valuation - Off Site Parts"
        //         },
        //    };

        List<SummaryReportModel> models = new List<SummaryReportModel>(); // this is what you'll return to the view
        foreach (Site s in sites)
        {
            SummaryReportModel model = new SummaryReportModel();
            model.Tital = new List<List<string>>()
                {
                     new List<string>()
                     {
                          "Valuation - Main Inventory",
                     },
                };
            model.ValuationColumns = new List<string>()
                {
                    "",
                    "",
                    "",
                    "Average Cost",
                    "",
                    "",
                    "Average Cost (With labour)"
                };
            model.ValuationRows = new List<List<string>>()
                {
                    new List<string>()
                    {
                        "Parts",
                        "",
                        "",
                        partcost.ToString("C2"),
                        "",
                        "",
                        partcost.ToString("C2")
                    },
                    new List<string>()
                    {
                        "",
                        "600000 series",
                        pc6.ToString("C2"),
                        "",
                        "600000 series",
                        pc6.ToString("C2"),
                        ""
                    },
                    new List<string>()
                    {
                        "",
                        "700000 series",
                        pc7.ToString("C2"),
                        "",
                        "700000 series",
                        pc7.ToString("C2"),
                        ""
                    },
                    new List<string>()
                    {
                        "",
                        "800000 series",
                        pc8.ToString("C2"),
                        "",
                        "800000 series",
                        pc8.ToString("C2"),
                        ""
                    },
                    new List<string>()
                    {
                        "Tools",
                        "",
                        "",
                        tools.ToString("C2"),
                        "",
                        "",
                        tools.ToString("C2")
                    },
                    new List<string>()
                    {
                        "",
                        "900000 series",
                        pc9.ToString("C2"),
                        "",
                        "900000 series",
                        pc9.ToString("C2"),
                        ""
                    },
                    new List<string>()
                    {
                        "",
                        "Other",
                        pco.ToString("C2"),
                        "",
                        "Other",
                        pco.ToString("C2"),
                        ""
                    },
                    new List<string>()
                    {
                        "Components",
                        "",
                        "",
                        compcost.ToString("C2"),
                        "",
                        "",
                        lcompcost.ToString("C2")
                    },
                    new List<string>()
                    {
                        "Items",
                        "",
                        "",
                        itemcost.ToString("C2"),
                        "",
                        "",
                        litemcost.ToString("C2")
                    },
            };

            //totlal class

            model.Total = new List<List<string>>()
                {
                     new List<string>()
                  {
                        "Total",
                        "",
                        "",
                        total.ToString("C2"),
                        "",
                        "",
                        ltotal.ToString("C2")
                    },
                };

            model.SecondTital = new List<List<string>>()
                {
                     new List<string>()
                     {
                      "Valuation - Off Site Parts"
                     },
                };
            foreach (OffSiteItemDetails d in s.ItemDetails)
            {
                model.OffReportColumns = new List<string>()
                    {
                        s.Name,
                        "",
                        "",
                        "Average Cost",
                        "",
                        "",
                        "Average Cost (With labour)"
                    };
                model.OffReportRows = new List<List<string>>()
                    {
                        new List<string>()
                        {
                            "Parts",
                            "",
                            "",
                            osiPartCost[s.ID].ToString("C2"),
                            "",
                            "",
                            osiPartCost[s.ID].ToString("C2")
                        },
                        new List<string>()
                        {
                            "",
                            "600000 series",
                            osiOpc6[s.ID].ToString("C2"),
                            "",
                            "600000 series",
                            osiOpc6[s.ID].ToString("C2"),
                            ""
                        },
                        new List<string>()
                        {
                            "",
                            "700000 series",
                            osiOpc7[s.ID].ToString("C2"),
                            "",
                            "700000 series",
                            osiOpc7[s.ID].ToString("C2"),
                            ""
                        },
                        new List<string>()
                        {
                            "",
                            "800000 series",
                            osiOpc8[s.ID].ToString("C2"),
                            "",
                            "800000 series",
                            osiOpc8[s.ID].ToString("C2"),
                            ""
                        },
                        new List<string>()
                        {
                            "Tools",
                            "",
                            "",
                            osiTools[s.ID].ToString("C2"),
                             "",
                             "",
                            osiTools[s.ID].ToString("C2"),

                        },
                        new List<string>()
                        {
                            "",
                            "900000 series",
                            osiOpc9[s.ID].ToString("C2"),
                            "",
                            "900000 series",
                            osiOpc9[s.ID].ToString("C2"),
                            ""
                        },
                        new List<string>()
                        {
                            "",
                            "Other",
                            osiOpco[s.ID].ToString("C2"),
                            "",
                            "Other",
                            osiOpco[s.ID].ToString("C2"),
                            ""
                        },
                        new List<string>()
                        {
                            "Components",
                            "",
                            "",
                            osiCompCost[s.ID].ToString("C2"),
                            "",
                            "",
                            osiLoCompCost[s.ID].ToString("C2")
                        },
                        new List<string>()
                        {
                            "Items",
                            "",
                            "",
                            osiItemCost[s.ID].ToString("C2"),
                            "",
                            "",
                            osiLoItemCost[s.ID].ToString("C2")
                        },
                    };
                model.OffReporTotal = new List<List<string>>()
                    {
                        new List<string>()
                            {
                                "Total",
                                "",
                                "",
                                osiTotal[s.ID].ToString("C2"),
                                "",
                                "",
                                osiFltotal[s.ID].ToString("C2")
                            },
                    };

            }
            model.osiGrandTotal = new List<List<string>>()
            {
                 new List<string>()
              {
                    "OSI Grand Total",
                    "",
                    "",
                    ostotal.ToString("C2"),
                    "",
                    "",
                    ofltotal.ToString("C2")
                },
            };
            models.Add(model);
        }
        return models;
    }

【讨论】:

  • 哇,非常感谢那个比尔!我目前只是在尝试“返回 View(x)”时收到一条错误消息,它说不能将“system.web.MVC.ViewResult 隐式转换为
  • 我以前知道什么时候是“回归模型”;它正在返回模型,但我该如何处理列表?
  • 我需要查看控制器。我这样做的方式是返回一个名为“getMyTables”的视图并将 x 传递给视图。控制器的返回类型是 ActionResult 你的可能不同。你能发布整个控制器吗?
  • 好的,我发布了整个控制器。
  • @chris OK,在这种情况下,您只需将私有 SummaryReportModel GetSummaryReport() {} 更改为私有 List GetSummaryReport(){} 以便它将列表返回给索引控制器。我假设您在控制器中填充模型...当我完成工作时,我将有一些时间重新编写我的答案,以便您可以将其复制到您的项目中。您如此接近...您只需要遍历网站集并为每次迭代添加一个新的 SummaryReportModel() 到 List 然后返回列表。
【解决方案2】:

我不确定我是否完全理解您的观点,因为@cell 非常神秘,但您不能只在视图中有一个 foreach 并期望提交一个集合。 您的字段需要命名为 site[0].name = ... 为此使用 for 循环并确保生成的 html 中的字段具有属性名称,如

site[0].sitename= ...
site[0].reporttitle =...

site[1].sitename= ...
site[1].reporttitle =...

【讨论】:

    猜你喜欢
    • 2023-03-19
    • 2018-01-06
    • 2013-12-26
    • 2017-05-21
    • 2017-03-27
    • 2015-02-12
    • 1970-01-01
    • 2020-07-30
    • 2021-03-03
    相关资源
    最近更新 更多