【问题标题】:ASP NET MVC Include double my viewASP NET MVC 包含双重我的观点
【发布时间】:2015-12-03 21:15:56
【问题描述】:

我有一个小问题,不知道如何解决。

当我在视图和控制器中写入时:

@Html.DisplayFor(modelItem => item.Category.Name)

return View(db.Product.Include(p=>p.Category).OrderByDescending(a => a.ProductID).Where(c => c.ClientID == clientid).ToList());

会发生这种情况:

当我将其更改为:

@Html.DisplayFor(modelItem => item.CategoryID)

return View(db.Product.OrderByDescending(a => a.ProductID).Where(c => c.ClientID == clientid).ToList());

会发生这种情况:

所以一切正常,但它不显示类别名称。我该如何解决?

编辑1:

public partial class Product
    {
        public int ID { get; set; }
        public int ProductID { get; set; }
        public string Name { get; set; }
        public int CategoryID { get; set; }
        public decimal Price { get; set; }
        public int Promotion { get; set; }
        public string Image1 { get; set; }
        public string Image2 { get; set; }
        public string Image3 { get; set; }
        public string Image4 { get; set; }
        public string Description { get; set; }
        public int ClientID { get; set; }

        public virtual Category Category { get; set; }
        public virtual Client Client { get; set; }
    }

【问题讨论】:

    标签: c# asp.net asp.net-mvc view controller


    【解决方案1】:

    将 GroupBy 添加到您的表达式中。更改

    View(db.Product.Include(p=>p.Category).OrderByDescending(a => a.ProductID).Where(c => c.ClientID == clientid).ToList());
    

    View(db.Product.Include(p=>p.Category).OrderByDescending(a => a.ProductID).Where(c => c.ClientID == clientid).GroupBy(P => P.ProductID).ToList())
    

    【讨论】:

    • 在 OrderByDescending 上出现此错误:“IGrouping”不包含“ProductID”的定义,并且没有扩展方法“ProductID”接受“IGrouping' 可以找到(您是否缺少 using 指令或程序集引用?)
    • 说明:在执行当前网络请求的过程中发生了一个未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。异常详细信息:System.InvalidOperationException:传入字典的模型项的类型为“System.Collections.Generic.List1[System.Linq.IGrouping2[System.Int32,AMBIT_CMS_MVC.Areas.Admin.Models.Product]]”,但是这个字典需要“System.Collections.Generic.IEnumerable`1[AMBIT_CMS_MVC.Areas.Admin.Models.Product]”类型的模型项。
    • 当您尝试使用 wirte "GroupBy(P => P." 时,您是否拥有智能感知的“ProductID”?
    • 你的模型是什么?
    • @model IEnumerable
    【解决方案2】:

    在我看来,出于某种原因,您会得到多个相同的项目。您可以通过这种方式获取不同的项目:

    var results = db.Product
        .Include(p=>p.Category)
        .OrderByDescending(a => a.ProductID)
        .Where(c => c.ClientID == clientid)
        .Distinct()
        .ToList());
    return View(results);
    

    但更好的是调查为什么您会得到多个相同的项目。在这种情况下,删除Distinct() 子句并在最后一条语句上放置一个断点。接下来,检查结果。必须有一个属性使 Id = 4 的第一项与 Id 为 4 的第二项不同。

    【讨论】:

    • 不知道。它通常保存在数据库中 - 只有一项。而你的答案只是混合它。
    • 混合?你什么意思?您可以将Product 类添加到问题中吗?
    • 也有加倍的商品,但只有按ID排序是混用的。
    猜你喜欢
    • 1970-01-01
    • 2020-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-02
    • 1970-01-01
    相关资源
    最近更新 更多