当前位置:首页 > 行业动态 > 正文

如何高效实现MVC框架中的分页功能?

MVC中的分页是一种将数据分成多个部分显示的技术,通常用于处理大量数据。

在ASP..NET MVC中,分页是一个非常重要的功能,特别是在数据量较大时,通过分页,可以将大量数据分成多个小部分显示,提高用户体验和页面加载速度,下面将详细介绍如何在MVC中实现分页功能。

如何高效实现MVC框架中的分页功能?  第1张

安装PagedList组件包

要实现分页功能,首先需要安装PagedList组件包,可以通过NuGet包管理器进行安装:

1、打开Visual Studio 2010或更高版本。

2、点击【项目】【管理NuGet程序包】。

3、在打开的NuGet包管理器窗体中,选择“联机”标签,然后搜索pagedlist。

4、点击“安装”按钮,安装PagedList.Mvc的最新版本(目前最新版本为4.5.0)。

创建视图实体对象和控制器

安装完成后,需要在MVC项目中增加一个视图实体对象,用于放置查询属性与查询结果,在Models目录下新增一个ViewBook.cs文件,代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using PagedList;
namespace MvcApplication1.Models
{
    public class ViewBook
    {
        public IPagedList<Book> Books { get; set; }
        public string Search { get; set; }      
        public string Category { get; set; }
        public string SortBy { get; set; }     
    }
}

修改BookController类的SearchIndex方法,使Books作为PagedList返回,具体代码如下:

public ActionResult SearchIndex(string Category, string searchString, string sortBy, int? page)
{
    var cateLst = new List<string>();
    var cateQry = from d in db.Books
                  orderby d.Category
                  select d.Category;
    cateLst.AddRange(cateQry.Distinct());
    ViewBag.category = new SelectList(cateLst); 
    var orderbyLst = new Dictionary<string, string>
    {
        { "价格从低到高", "price_lowest" },
        { "价格从高到低", "price_highest" }
    };
    ViewBag.sortBy = new SelectList(orderbyLst, "Value", "Key");
    var books = from m in db.Books
               select m; 
    if (!String.IsNullOrEmpty(searchString))
    {
        books = books.Where(s => s.Name.Contains(searchString));
    }
    switch (sortBy)
    {
        case "price_lowest":
            books = books.OrderBy(p => p.Price);
            break;
        case "price_highest":
            books = books.OrderByDescending(p => p.Price);
            break;
        default:
            books = books.OrderBy(p => p.Name);
            break;
    } 
    const int pageItems = 5;
    int currentPage = (page ?? 1);
    IPagedList<Book> pagedBooks = books.ToPagedList(currentPage, pageItems);
    ViewBook viewModel = new ViewBook
    {
        Books = pagedBooks,
        Search = searchString,
        Category = Category,
        SortBy = sortBy
    };
    return View(viewModel);
}

在视图中使用分页功能

在视图文件中,使用PagedList.Mvc提供的方法来显示分页控件,以下是一个简单的示例:

@model PagedList.IPagedList<WebMvcDemo.Models.Book>
@using PagedList.Mvc;
@{
    ViewBag.Title = "Index";
}
<div >
    <h2>图书列表</h2>
    <table >
        <tr>
            <th>编号</th>
            <th>名称</th>
            <th>类别</th>
            <th>价格</th>
        </tr>
        @foreach (var item in Model)
        {
            <tr>
                <td>@item.ID</td>
                <td>@item.Name</td>
                <td>@item.Category</td>
                <td>@item.Price</td>
            </tr>
        }
    </table>
    <div>每页 @Model.PageSize 条记录,共 @Model.PageCount 页,当前第 @Model.PageNumber 页</div>
    @Html.PagedListPager(Model, page => Url.Action("Index", new { page }))
</div>

FAQs常见问题解答

问题1:如何在MVC中实现自定义分页样式?

答:可以在视图中引入PagedListRenderOptions类来自定义分页控件的显示样式。

@using X.PagedList.Mvc.Core;
@X.PagedList.Mvc.Core.Common; // 7.6及以上版本需要引入Comm
@model PagedList.IPagedList<YourModel>
...
@Html.PagedListPager(Model, page => Url.Action("Index", new { page }), new PagedListRenderOptions() { DisplayLinkToFirstPage = PagedListDisplayMode.Never, DisplayLinkToLastPage = PagedListDisplayMode.Never, DisplayLinkToNextPage = PagedListDisplayMode.IfNeeded, DisplayLinkToPreviousPage = PagedListDisplayMode.IfNeeded })

问题2:如何在不同版本的ASP.NET MVC中使用分页功能?

答:在不同的ASP.NET MVC版本中,分页功能的实现方式略有不同,对于ASP.NET Core MVC,可以使用X.PagedList.Mvc.Core包来实现分页,安装方法与之前类似,但需要确保项目依赖的是.NET Core,控制器和视图的实现也与之前的示例类似,只需引入相应的命名空间即可。

0