有错误将此匿名返回到视图

[1]我想将匿名列表传递给视图,但我发现很难找到帮助我的代码:

我把模型作为:

namespace OpenOrderFramework.Models { [Bind(Exclude = "ID")] public class Item { private static NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger(); [Key] [ScaffoldColumn(false)] public int ID { get; set; } [DisplayName("Catagorie:")] public int CatagorieId { get; set; } [Required(ErrorMessage = " Item name cannot be empty, this is required")] [DisplayName("Item Name")] public string ItemName { get; set; } [DisplayName("GRC TAG")] public string GRCTag { get; set; } [DisplayName("Location:")] public int LocationId { get; set; } [DisplayName("Item Name:")] public int itemnameId { get; set; } [Required(ErrorMessage = "Quantity of item in a Location is required!")] [DisplayName("Quantity in Store:")] public int ItemQty { get; set; } public DateTime DateCreated { get; set; } 

控制器是:

 private ApplicationDbContext db = new ApplicationDbContext(); // GET: Items public ActionResult Index(string sortOrder, string currentFilter, string searchString, int? page) { ViewBag.CurrentSort = sortOrder; ViewBag.NameSortParm = String.IsNullOrEmpty(sortOrder) ? "name_desc" : "Name"; ViewBag.PriceSortParm = sortOrder == "Name" ? "Loc_desc" : "Location"; IEnumerable items = db.Items; var ko= (from r in items.GroupBy(x => new { x.Catagorie, x.ItemName }) .Select(g => new { Catagorie = g.Key.Catagorie.Name, ItemName = g.Key.ItemName, ItemQty = g.Sum(s => s.ItemQty), Location = g.First().Location.Name }) select r).ToList(); if (!string.IsNullOrWhiteSpace(searchString)) { items = items.Where(s => s.ItemName.Contains(searchString.ToUpper()) || s.Catagorie.Name.ToUpper().Contains(searchString.ToUpper()) || s.Location.Name.ToUpper().Contains(searchString.ToUpper())).ToList().ToPagedList(page ?? 1, 20); //} } else { items = items.ToList().ToPagedList(page ?? 1, 10); } return View(ko.ToList().ToPagedList(page ?? 1, 20)); } 

而观点是:

 @model PagedList.IPagedList @using PagedList.Mvc; @using PagedList;  @foreach (var item in Model) { 

[2]请帮我处理代码并将filterd列表返回给视图。 尝试了这么多,但没有工作..得到了这个错误

传递到字典中的模型项的类型为’PagedList.PagedList’1 [ f__AnonymousType7`4 [System.String,System.String,System.Int32,System.String]]’,但此字典需要模型项输入’PagedList.IPagedList’1 [OpenOrderFramework.Models.Item]’

请帮助我将代码返回给我的ipagedlist匿名列表

在您的视图更改中:

@model PagedList.IPagedList

@model PagedList.IPagedList

你的观点在第一行说明……

 @model PagedList.IPagedList 

您应该作为View()调用的参数移交的对象需要具有此类型…

在剃刀视图中将匿名对象作为模型是不受支持的,您可以将它们视为动态但是您会丢失编译时检查(您不应该这样做)

而不是匿名对象,为您的视图创建模型或视图模型对象并将其交给它们,也许您可​​以重复使用该项类

编辑:

你想要一个代码示例……

这个问题从你的匿名类型开始……

  .Select(g => new { Catagorie = g.Key.Catagorie.Name, ItemName = g.Key.ItemName, ItemQty = g.Sum(s => s.ItemQty), Location = g.First().Location.Name }) 

创建一个名称适合您当前命名约定和应用程序体系结构的新类:该类将保存数据,该数据不代表数据库中的实体,而是分组聚合结果。 如果该数据仅用于该视图中,则它有资格作为视图模型…当怀疑该类所属的应用程序中的哪个层时,将其视为数据传输对象或DTO

在这个例子中,我将其称为ItemSumDTO,它具有与您的匿名类型相同的属性

而不是在上面的选择中创建匿名类型对象,创建ItemSumDTOs

 .Select(g => new 

 .Select(g => new ItemSumDTO 

如果你的ORM有替换的问题,那么在此时坚持使用anon对象,之后,在调用.ToList()之后再引入另一个.Select(x=> new ItemSumDTO{Catagorie = x.Catagorie, ItemName = x.ItemName, ItemQty = x.ItemQty, Location = x.Location})

在View中,将@model定义更改为PagedList.IPagedList

Catagory Item Name. Quantity.
@Html.DisplayFor(modelItem => item.Catagorie.Name) @Html.DisplayFor(modelItem => item.ItemName) @Html.DisplayFor(modelItem => item.ItemQty)