Asp.net MVC 4 / 5 中的分页

Posted

技术标签:

【中文标题】Asp.net MVC 4 / 5 中的分页【英文标题】:Pagination in Asp.net MVC 4 / 5 【发布时间】:2014-12-19 14:43:05 【问题描述】:

我正在使用模型对象向视图发送记录列表 现在我想要分页 但问题是我传递的模型对象不是分页列表对象。

如何将简单对象转换为pagedList对象

这是我的代码

public ActionResult ApplicantsRecord(int page = 1)

    List<ApplicantsRecord> ar = new List<ApplicantsRecord>();
    ApplicantsRecord a = new ApplicantsRecord();
    List<ApplicantsRecordDetailViewModel> apvmlist = 
                                    new List<ApplicantsRecordDetailViewModel>();
    ApplicantsRecordDetailViewModel apvm = new ApplicantsRecordDetailViewModel();
    //ar = db.ApplicantsRecords.ToList();
    var groupedAR = db.ApplicantsRecords
                      .GroupBy(x => x.SessionId)
                      .Select(y => new
                      
                          SessionId = y.Key,
                          ApplicationsRecords = y.FirstOrDefault(),
                      ).OrderByDescending(x => x.ApplicationsRecords.LoginDate)
                      .ToPagedList(page, 10);

    foreach (var i in groupedAR)
    
        ar.Add(i.ApplicationsRecords);
    

    return View(ar);

【问题讨论】:

what i am passing is not a pagedlist object 那么为什么当你有分页列表时你传递不分页列表呢?为什么要将数据从分页列表复制到列表并传递该列表?为什么不能直接传groupedAR 如何通过这个我不知道请把代码行发给我 【参考方案1】:

如果我理解你的问题,你可能想做这样的事情:

var groupedAR = db.ApplicantsRecords.GroupBy(x => x.SessionId)
    .Select(y => new
    
        SessionId = y.Key,
        ApplicationsRecords = y.FirstOrDefault(),

    ).OrderByDescending(x => x.ApplicationsRecords.LoginDate).Select(i=>i.ApplicationsRecords).ToPagedList(page, 10);

return View(ar);

请注意上面的.Select(i=&gt;i.ApplicationsRecords)


或者你可以这样做:

var groupedAR = db.ApplicantsRecords.GroupBy(x => x.SessionId)
    .Select(y => new
    
        SessionId = y.Key,
        ApplicationsRecords = y.FirstOrDefault(),

    ).OrderByDescending(x => x.ApplicationsRecords.LoginDate);

foreach (var i in groupedAR)

    ar.Add(i.ApplicationsRecords);

return View(ar.ToPagedList(page, 10));

注意将ToPagedList移到其他地方

【讨论】:

感谢这个工作,但在视图中的代码是什么【参考方案2】:

使用 jQuery 数据表 https://datatables.net/ 。默认情况下它有一个分页

查看

var oProtocolTable = $('#MyTable').DataTable(
        "ajax": "/Home/ProtocolAjaxHandler",
    );

控制器

public ActionResult ProtocolAjaxHandler(JQueryDataTableParamModel param)
        
            var ar = db.ApplicantsRecords.ToList();
            if (ar == null)
                return Json(new
                
                    data = new List<string>()
                ,
                JsonRequestBehavior.AllowGet);
            return Json(new
            
                aaData = from emp in riski
                         select new[]  emp.col1, emp.col2 

            ,
            JsonRequestBehavior.AllowGet);

        

【讨论】:

【参考方案3】:

不要使用List&lt;ApplicantsRecord&gt; 作为视图中的模型,而是使用PagedList.IPagedList&lt;ApplicantsRecord&gt;

(ApplicantsRecord.cshtml 顶部)

@model PagedList.IPagedList<ApplicantsRecord>

然后只需从控制器返回您的分页列表,而不将其复制到其他内容中:

ApplicantsRecord() 控制器操作结束

return View(groupedAr);

一旦你这样做了,你应该能够访问你的模型,因为你已经在使用它了,但它现在应该有你需要的分页值:

在 ApplysRecord.cshtml 中的某处

Page @Model.PageNumber of @Model.PageCount
<input type="hidden" name="page" value="@Model.PageNumber" />

【讨论】:

【参考方案4】:

您可以尝试使用 Webdiyer.MvcPager。 MvcPager 是一个免费开源的 ASP.NET MVC 分页组件,它公开了一系列在 ASP.NET MVC 应用程序中使用的扩展方法,其实现受到 Scott Guthrie 的 PagedList 思想的启发,于 2009 年首次发布并已于从那时起稳步改进和更新。最新版本 3.0 是最强大的 ASP.NET MVC 分页控件之一。在http://en.webdiyer.com/mvcpager/demos/查看在线演示

【讨论】:

以上是关于Asp.net MVC 4 / 5 中的分页的主要内容,如果未能解决你的问题,请参考以下文章

在使用asp.net mvc查询时候的分页

ASP.NET MVC3 - 仅分页(不显示 WebGrid)

ASP.NET 中的分页;过滤后页数不变

asp.net webforms中Jquery Datatable中的分页

Gridview 分页 ASP.NET 与 Gridview 外部的分页器面板

asp.net mvc 分页之后Request.Form获取不到数据