使用ASP.NET MVC中的PagedList.Mvc创建用于收集匿名类型的寻呼机

时间:2016-08-05 10:17:10

标签: asp.net-mvc pagination pagedlist

我正在开发一个ASP.NET MVC项目。在我的项目中,我需要实现分页功能。所以我使用PagedList.Mvc。我安装了它运行这个命令," install-package PagedList.Mvc"在包管理器控制台中。我知道如何使用它实现分页。但我遇到了实现匿名类型视图集合的问题。请参阅下面的方案。

这是我实施分页逻辑的行动方法

public ActionResult IpList(int page = 1)
        {
            List<IpVisitInfo> ipVisitList = new List<IpVisitInfo>();
            var rawVisits = trackTool.Visitors.GroupBy(x => x.IpAddress).Select(x => new { Visitors = x.Count(), IpAddress = x.Key, LastVisitedTime = x.OrderByDescending(c => c.Id).FirstOrDefault().VisitedAt }).ToPagedList(page,PageSize);
            if(rawVisits!=null && rawVisits.Count()>0)
            {
               foreach(var visit in rawVisits)
               {
                   IpVisitInfo info = new IpVisitInfo
                   {
                       IpAddress = visit.IpAddress,
                       LastVisitedAt = visit.LastVisitedTime,
                       TotalVisitors = visit.Visitors
                   };
                   ipVisitList.Add(info);
               }
            }
            IpVisitListVM model = new IpVisitListVM
            {
                IpList = ipVisitList
            };
            return View(model);
        }

正如您所看到的,我检索了匿名类型集合,然后遍历它并分配给强类型集合。我在匿名类型集合上调用了ToPagedList(PageNumber,PageSize)。但问题是在视图中实现分页所需的所有数据都是匿名类型集合。在视图中,分页必须如下所示。

@Html.PagedListPager(Model.Items, page => Url.Action("List", new { page }))

这是我的视图模型

 public class IpVisitListVM
    {
        public IEnumerable<IpVisitInfo> IpList { get; set; }
    }

所以根据我正在做的事情,我的视图模型的IpList没有必要的数据来呈现分页。如果我在不使用ToPagedList()的情况下检索所有匿名收集拳头,然后遍历每个记录,性能将非常慢,因为它首先从数据库检索所有记录。我会有这么多的记录。如何在匿名类型视图上使用PagedList并传递给强类型视图以实现分页?

在视图模型中,我正在使用此属性

IEnumerable<IpVisitInfo> IpList

而不是这个

IPagedList<IpVisitInfo> IpList

因为它没有足够的数据来创建分页。因为我过滤了行动。

但是如果我可以通过以下列表

trackTool.Visitors.GroupBy(x => x.IpAddress).Select(x => new { Visitors = x.Count(), IpAddress = x.Key, LastVisitedTime = x.OrderByDescending(c => c.Id).FirstOrDefault().VisitedAt }).ToPagedList(page,PageSize);

分页完美创造,性能更好。有没有办法通过该清单?

0 个答案:

没有答案