MVC学习之数据分页:利用组件PagedList.Mvc

准备工作:

     在项目的【管理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:就是分页导航链接。

 

 

 

写写博客,方便自己也方便有需要的人!*_*!

 

 

 

 

 

 

 

 

 

    

posted @ 2015-08-03 14:52  会编程的厨子  阅读(585)  评论(0编辑  收藏  举报