准备工作:
在项目的【管理NuGet程序包】中安装PagedList.Mvc组件。
安装好了截图让下:
具体实现
后台控制器代码:
using Paging.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using PagedList; //一定要引入这个命名空间
using System.Data;
namespace Paging.Controllers
{
public class PagingController : Controller
{
private ComputerEntities db = new ComputerEntities(); //得到数据库上下文
/// <summary>
/// 数据展示
/// </summary>
/// <param name="p">当前页数</param>
/// <returns>当页的数据</returns>
public ActionResult Index(int p =1)
{
var data = db.ComputerInfo.ToList(); //得到数据源
//P:表示当前是第几页,2:表示每页展示的数据条数
var pageData = data.ToPagedList(pageNumber:p,pageSize:2);
return View(pageData);
}
/// <summary>
/// 编辑数据
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public ActionResult Edit(int id=0)
{
var data = db.ComputerInfo.Find(id);
if (data != null)
{
return View(data);
}
else
{
return HttpNotFound();
}
}
[HttpPost]
public ActionResult Edit(ComputerInfo cinfo)
{
if(ModelState.IsValid){
db.Entry(cinfo).State = EntityState.Modified;
db.SaveChanges();
}
return RedirectToAction("Index");
}
/// <summary>
/// 删除数据
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
[HttpPost]
public ActionResult Delete(int id)
{
var Cinfo = db.ComputerInfo.Find(id);
if (Cinfo!=null)
{
db.ComputerInfo.Remove(Cinfo);
db.SaveChanges();
}
return RedirectToAction("Index", "Paging");
}
/// <summary>
/// 数据详情
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public ActionResult Details(int id)
{
var data = db.ComputerInfo.Find(id);
return View(data);
}
}
}
前端页面:
Index:数据展示页面【涉及到分页】
@using PagedList //记得引入
@using PagedList.Mvc //记得引入
@model IEnumerable<Paging.Models.ComputerInfo>
@{
ViewBag.Title = "数据展示页";
}
@{
var ajaxOptions = new AjaxOptions()
{
OnSuccess = "OK",
OnFailure = "Failure",
Confirm = "您确定要删除这条信息吗?",
HttpMethod="Post"
};
}
@section scripts{
@Scripts.Render("~/bundles/jqueryval")
<script>
function OK() {
alert("删除成功!");
location.reload();
}
function Failure() {
alert("删除失败!");
}
</script>
}
<h2>数据展示</h2>
<table>
<tr>
<th>
@Html.DisplayNameFor(model => model.Name)
</th>
<th>
@Html.DisplayNameFor(model => model.Price)
</th>
<th></th>
</tr>
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.Name)
</td>
<td>
@Html.DisplayFor(modelItem => item.Price)
</td>
<td>
@Html.ActionLink("编辑", "Edit", new { id=item.Id }) |
@Html.ActionLink("详情", "Details", new { id=item.Id }) |
@Ajax.ActionLink("删除", "Delete", new { id = item.Id }, ajaxOptions)
</td>
</tr>
}
</table>
//下面是分页涉及到的东西<link href="~/Content/PagedList.css" rel="stylesheet" /> //样式
@{
var data = Model as IPagedList<Paging.Models.ComputerInfo>; //得到数据源
}
@Html.PagedListPager(list: data, generatePageUrl: Page => Url.Action("Index", new { p=Page})) //分页链接
编辑页面:
@model Paging.Models.ComputerInfo
@{
ViewBag.Title = "数据编辑页";
}
<h2>编辑页面</h2>
@using (Html.BeginForm()) {
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)
<fieldset>
<legend>@Model.Name 的编辑页面</legend>
@Html.HiddenFor(model => model.Id)
<div class="editor-label">
@Html.LabelFor(model => model.Name)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Name)
@Html.ValidationMessageFor(model => model.Name)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Price)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Price)
@Html.ValidationMessageFor(model => model.Price)
</div>
<p>
<input type="submit" value="保存" />
</p>
</fieldset>
}
<div>
@Html.ActionLink("首页", "Index")
</div>
@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
}
详情页面:
@model Paging.Models.ComputerInfo
@{
ViewBag.Title = "数据详情页";
}
<h2>详情页</h2>
<fieldset>
<legend>@Model.Name 的详情信息</legend>
<div class="display-label">
@Html.DisplayNameFor(model => model.Name)
</div>
<div class="display-field">
@Html.DisplayFor(model => model.Name)
</div>
<div class="display-label">
@Html.DisplayNameFor(model => model.Price)
</div>
<div class="display-field">
@Html.DisplayFor(model => model.Price)
</div>
</fieldset>
<p>
@Html.ActionLink("编辑", "Edit", new { id=Model.Id }) |
@Html.ActionLink("首页", "Index")
</p>
小结:
在使用PagedList组件实现分页:主要就以下几步:
1、在后台代码中引入:using PagedList;命名空间,同时获得数据源【注意数据源的类型一定要转换成IEnumerable或是IQueryable,或是继承这两个型别的子类也可以】:data。
2、通过var pagedata = data.ToPagedList(pageNumber:p,pageSize:2) 获得分页后的结果信息:其中pageNumber:表示当前是第几页,PageSize:表示每页展示的数据的条数。
3、在页面顶部引入以下两个命名空间:
@using PagedList
@using PagedList.Mvc
4、当安装好了PagedList组件后,在项目的Content文件夹下,会有一个PagedList.css的默认的分页所需的样式表,在使用@Html.PagedListPager之前引用它。会让分页更加好看
5、在View页面上通过@Html.PagedListPager(list: data, generatePageUrl: Page => Url.Action("Index", new { p=Page}))辅助方法输出分页所需的分页导览链接。其中list:对应的是数据【控制器传到页面上的数据】,但是这个类型要转为IpagedList<T>类型的。,generatePageUrl:就是分页导航链接。
写写博客,方便自己也方便有需要的人!*_*!