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=>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<ApplicantsRecord>
作为视图中的模型,而是使用PagedList.IPagedList<ApplicantsRecord>
:
(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 MVC3 - 仅分页(不显示 WebGrid)
asp.net webforms中Jquery Datatable中的分页