Asp.net MVC 4 / 5 中的分页

本文关键字:分页 net MVC Asp | 更新日期: 2023-09-27 18:34:47

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

如何将简单对象转换为 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);
}

Asp.net MVC 4 / 5 中的分页

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

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=>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移动到其他地方

Use jQuery DataTables 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);
        }
不要使用

List<ApplicantsRecord> 作为视图中的模型,而是使用 PagedList.IPagedList<ApplicantsRecord>

(ApplicantsRecord.cshtml的顶部(

@model PagedList.IPagedList<ApplicantsRecord>

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

(

申请人记录((控制器操作结束(

return View(groupedAr);

完成此操作后,您应该能够访问您的模型,因为您已经在使用它,但它现在应该具有您需要的分页值:

(在ApplicantsRecord.cshtml的某个地方(

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

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