ASP NET MVC 包含双重我的观点

Posted

技术标签:

【中文标题】ASP NET MVC 包含双重我的观点【英文标题】:ASP NET MVC Include double my view 【发布时间】: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; 
    

【问题讨论】:

【参考方案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排序是混用的。

以上是关于ASP NET MVC 包含双重我的观点的主要内容,如果未能解决你的问题,请参考以下文章

ASP.Net MVC - GET/POST 具有不同模型时的 ModelState.AddModelError

ASP.NET MVC 通用局部视图模式

ASP.NET MVC 4 与淘汰赛

ASP.Net MVC - 显示带有换行符的文本

Java MVC:保持我的观点更新

在 ASP.NET MVC 3 中,Jquery 令牌输入未填充数据库中的值