有错误将此匿名返回到视图
[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; Catagory Item Name. Quantity. @foreach (var item in Model) { @Html.DisplayFor(modelItem => item.Catagorie.Name) @Html.DisplayFor(modelItem => item.ItemName) @Html.DisplayFor(modelItem => item.ItemQty)
[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