一、业务描述
以手写页面控件的方式,实现数据列表分页。
二、开发环境
Visual Studio 2019,Sql Server Express 2018
三、数据模型
四、导入实体数据模型
Visual Studio 2019→创建新项目→ASP.NET Web应用程序(.NET Framework)→MVC→ 右键“添加”→“新建项”→“ADO.NET实体数据模型”→“来自数据库的EF设计器”→连接数据库→勾选数据库中的表→勾选“确定所声称对象名称的单复数形式”→添加数据注解
public partial class Product
{
public int id { get; set; }
[DisplayName("产品名称")]
[Required]
public string name { get; set; }
[DisplayName("生产日期")]
[Required]
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
public System.DateTime pDate { get; set; }
[DisplayName("生产人")]
[Required]
public string pWork { get; set; }
[DisplayName("价格")]
[Required]
[DataType(DataType.Currency)]
public decimal price { get; set; }
}
五、后台分页
- ProductController,数据库上下文
//获取数据库上下文 private NetDBEntities dbContext = new NetDBEntities();
- Page Action
/// <summary> /// 分页 /// </summary> /// <param name="pageIndex">页码</param> /// <param name="pageSize">页容量</param> /// <returns></returns> public ActionResult Page(int pageIndex = 1, int pageSize = 5) { //后台数据校验 pageIndex = pageIndex < 1 ? 1 : pageIndex; pageSize = pageSize < 1 ? 5 : pageSize; //定义数据集规则 var products = dbContext.Products.Select(p => p); //搜索功能 //将 页码 以弱类型方式向页面传值 ViewBag.pageIndex = pageIndex; //将 每页条数 以弱类型方式向页面传值 ViewBag.pageSize = pageSize; //总记录数 var total = products.Count(); //将 总记录数 以弱类型方式向页面传值 ViewBag.total = total; //总页数 var pageCount = Convert.ToInt32(Math.Ceiling(Convert.ToDouble(total) / pageSize)); //将 总页数 以弱类型方式向页面传值 ViewBag.pageCount = pageCount; //排序功能 products = products.OrderBy(p => p.id); //根据页面大小和页码计算实体集合 products = products.Skip((pageIndex - 1) * pageSize).Take(pageSize); //将实体集合以强类型方式向页面传值 return View(products.ToList()); }
六、页面分页
- 添加视图
- 定义页面变量
@{ //页码 int pageIndex = ViewBag.pageIndex; //页容量 int pageSize = ViewBag.pageSize; //序号 int index = (pageIndex - 1) * pageSize + 1; //总记录数 int total = ViewBag.total; //总页数 int pageCount = ViewBag.pageCount; //是否有上一页 bool bPrev = pageIndex > 1; //是否有下一页 bool bNext = pageIndex < pageCount; }
- 分页导航控件
<span> 共 @total 条数据</span> @Html.ActionLink("上一页", "page", new { pageIndex = pageIndex - 1, pageSize = pageSize }, new { @class = bPrev ? "btn btn-default" : "btn btn-default disabled" }) <span> 第 @pageIndex 页 / 共 @pageCount 页 </span> @Html.ActionLink("下一页", "page", new { pageIndex = pageIndex + 1, pageSize = pageSize }, new { @class = bNext ? "btn btn-default" : "btn btn-default disabled" })
- 为表格添加序号
<table class="table"> <tr> <th>序号</th> </tr> @foreach (var item in Model) { <tr> <td> @(index++) </td> </tr> } </table>