基于jquery的分页控件(C#)

基于jQuery的分页控件(C#)攻略

概述

本文将介绍如何使用jQuery编写基于C#的分页控件。分页控件可以提高页面的易读性和易用性,方便用户查看数据。

分页控件的实现方式

实现一个分页控件主要分为两个部分:

  1. 服务端代码,用于提供数据或者查询数据(本文中使用C#做演示)。
  2. 客户端代码,用于实现分页控件的交互和显示(本文中使用jQuery做演示)。

服务端代码

为了更好地演示实现过程,这里我将使用C#的AspNet MVC框架作为服务端的实现,它提供了很好的模板支持和工具集,方便我们快速地搭建出一个数据展示和分页的Web应用。

实现步骤

  1. 创建一个Asp.Net MVC应用。
  2. 配置路由(可以使用默认的)。
  3. 定义数据模型,这里以学生信息为例。
public class Student
{
    public int Id { get; set; }
    public string Name { get; set; }
    public int Age { get; set; }
}
  1. 定义数据访问层,从数据库中获取分页数据。
public interface IStudentRepository
{
    int Count();
    List<Student> GetPageList(int pageIndex, int pageSize);
}

public class StudentRepository : IStudentRepository
{
    private readonly List<Student> _students;

    public StudentRepository()
    {
        _students = new List<Student>();
        for (int i = 1; i <= 100; i++)
        {
            _students.Add(new Student { Id = i, Name = $"Student{i}", Age = 18 });
        }
    }

    public int Count() => _students.Count;

    public List<Student> GetPageList(int pageIndex, int pageSize)
    {
        return _students.Skip((pageIndex - 1) * pageSize).Take(pageSize).ToList();
    }
}
  1. 实现控制器,调用数据访问层获得分页数据。
public class StudentController : Controller
{
    private readonly IStudentRepository _repository;

    public StudentController(IStudentRepository repository)
    {
        _repository = repository;
    }

    public ActionResult Index(int pageIndex = 1, int pageSize = 10)
    {
        var totalCount = _repository.Count();
        var pageList = _repository.GetPageList(pageIndex, pageSize);

        ViewBag.TotalCount = totalCount;

        return View(pageList);
    }
}

测试

在浏览器中输入http://localhost:xxx/Student/Index,即可看到分页数据的效果。如果要实现翻页功能,请看下一节。

客户端代码

实现步骤

  1. 导入jQuery和分页控件js文件(这里使用了jquery.pagination.js)。
<script src="~/Scripts/jquery-3.3.1.min.js"></script>
<script src="~/Scripts/jquery.pagination.js"></script>
  1. 创建分页控件容器。
<div id="pagination"></div>
  1. 在页面加载完成时初始化分页控件。
$(function () {
    initPagination();
});

function initPagination() {
    $("#pagination").pagination({
        totalData: $("#TotalCount").val(),
        showData: $("#PageSize").val(),
        pageCount: 0, // 分页总数,留空表示自动计算
        current: 1,   // 当前页码
        count: 5,     // 当前分页控件中显示的页码个数
        prevCls: "prev",   // 上一页样式
        nextCls: "next",   // 下一页样式
        activeCls: "active",      // 高亮样式
        coping: true,     // 是否显示首页、尾页
        isHide: true,     // 是否只有一页的时候隐藏分页控件
        homePage: "首页",
        endPage: "尾页",
        prevContent: "<",
        nextContent: ">",
        callback: function (pageIndex) {
            getData(pageIndex);
        }
    });
}

function getData(pageIndex) {
    $.ajax({
        type: "GET",
        url: "/Student/Index",
        data: { pageIndex: pageIndex },
        success: function (data) {
            // 刷新数据
            console.log(data);
        },
        error: function (e) {
            console.log(e);
        }
    });
}
  1. 获取分页数据。
public class StudentController : Controller
{
    private readonly IStudentRepository _repository;

    public StudentController(IStudentRepository repository)
    {
        _repository = repository;
    }

    public ActionResult Index(int pageIndex = 1, int pageSize = 10)
    {
        var totalCount = _repository.Count();
        var pageList = _repository.GetPageList(pageIndex, pageSize);

        ViewBag.TotalCount = totalCount;
        ViewBag.PageSize = pageSize;

        return View(pageList);
    }
}

测试

在浏览器中输入http://localhost:xxx/Student/Index,即可看到分页数据和分页控件的效果。您可以点击不同的页码来测试翻页效果。

示例

下面我将展示两个示例,一个是传统的分页效果,另一个是ajax分页。

传统分页

假设我们有一个学生列表,其中包含100条数据,每页显示10条数据。我们需要实现分页,并且每一页都需要从服务器获取数据。

public class HomeController : Controller
{
    private readonly IStudentRepository _repository;

    public HomeController(IStudentRepository repository)
    {
        _repository = repository;
    }

    [HttpGet]
    public IActionResult Index(int pageIndex = 1, int pageSize = 10)
    {
        var totalCount = _repository.Count();
        var pageList = _repository.GetPageList(pageIndex, pageSize);

        ViewBag.TotalCount = totalCount;
        ViewBag.PageSize = pageSize;

        return View(pageList);
    }
}
@model List<Student>

<table>
    <tr>
        <th>ID</th>
        <th>Name</th>
        <th>Age</th>
    </tr>
    @foreach (var student in Model)
    {
        <tr>
            <td>@student.Id</td>
            <td>@student.Name</td>
            <td>@student.Age</td>
        </tr>
    }
</table>

<div id="pagination"></div>

<input type="hidden" id="TotalCount" value="@ViewBag.TotalCount" />
<input type="hidden" id="PageSize" value="@ViewBag.PageSize" />

@section scripts{
    <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
    <script src="/js/jquery.pagination.js"></script>

    <script>
        $(function () {
            initPagination();
        });

        function initPagination() {
            $("#pagination").pagination({
                totalData: $("#TotalCount").val(),
                showData: $("#PageSize").val(),
                pageCount: 0,
                current: 1,
                count: 5,
                prevCls: "prev",
                nextCls: "next",
                activeCls: "active",
                coping: true,
                homePage: "首页",
                endPage: "尾页",
                prevContent: "<",
                nextContent: ">",
                callback: function (pageIndex) {
                    getData(pageIndex);
                }
            });
        }

        function getData(pageIndex) {
            $.ajax({
                type: "GET",
                url: "/Home/Index",
                data: { pageIndex: pageIndex },
                success: function (data) {
                    $("table tr:gt(0)").remove();
                    $.each(data, function (i, item) {
                        $("table").append("<tr><td>" + item.Id + "</td><td>" + item.Name + "</td><td>" + item.Age + "</td></tr>");
                    });
                },
                error: function (e) {
                    console.log(e);
                }
            });
        }
    </script>
}

Ajax分页

假设我们有一个学生列表,其中包含100条数据,每页显示10条数据。我们需要实现分页,并且每一页都使用Ajax异步获取数据(请求json格式数据)。

public class HomeController : Controller
{
    private readonly IStudentRepository _repository;

    public HomeController(IStudentRepository repository)
    {
        _repository = repository;
    }

    [HttpGet]
    public IActionResult Index()
    {
        return View();
    }

    [HttpPost]
    public IActionResult GetPageList(int pageIndex = 1, int pageSize = 10)
    {
        var totalCount = _repository.Count();
        var pageList = _repository.GetPageList(pageIndex, pageSize);

        return Json(new { TotalCount = totalCount, PageList = pageList });
    }
}
<table>
    <thead>
        <tr>
            <th>ID</th>
            <th>Name</th>
            <th>Age</th>
        </tr>
    </thead>
    <tbody id="list">

    </tbody>
</table>

<div id="pagination"></div>

@section scripts{
    <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
    <script src="/js/jquery.pagination.js"></script>

    <script>
        $(function () {
            initPagination();
        });

        function initPagination() {
            $("#pagination").pagination({
                totalData: $("#TotalCount").val(),
                showData: $("#PageSize").val(),
                pageCount: 0,
                current: 1,
                count: 5,
                prevCls: "prev",
                nextCls: "next",
                activeCls: "active",
                coping: true,
                homePage: "首页",
                endPage: "尾页",
                prevContent: "<",
                nextContent: ">",
                callback: function (pageIndex) {
                    getData(pageIndex);
                }
            });
        }

        function getData(pageIndex) {
            $.ajax({
                type: "POST",
                url: "/Home/GetPageList",
                data: { pageIndex: pageIndex },
                dataType: "json",
                success: function (data) {
                    $("#list").empty();
                    $.each(data.PageList, function (i, item) {
                        var html = "<tr><td>" + item.Id + "</td><td>" + item.Name + "</td><td>" + item.Age + "</td></tr>";
                        $("#list").append(html);
                    });

                    $("#pagination").pagination({
                        totalData: data.TotalCount,
                        pageCount: Math.ceil(data.TotalCount / $("#PageSize").val()),
                    });
                },
                error: function (e) {
                    console.log(e);
                }
            });
        }
    </script>
}

总结

通过以上步骤,我们就能够成功地实现基于jQuery的分页控件(C#)。通过自定义的样式和代码,我们能够快速地实现适用于不同场景的分页控件效果。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:基于jquery的分页控件(C#) - Python技术站

(0)
上一篇 2023年5月31日
下一篇 2023年5月31日

相关文章

  • C#给图片加水印的简单实现方法

    下面给您详细讲解“C#给图片加水印的简单实现方法”的完整攻略。 1.安装必要的开发环境 为了进行本文的演示,我们需要安装Visual Studio开发环境、.NET框架和C#语言工具。 2.新建C#控制台应用程序项目 打开Visual Studio,点击菜单栏的“文件”-“新建”-“项目”,在弹出的对话框中选择“控制台应用程序”项目,起一个项目名称并确定,然…

    C# 2023年6月7日
    00
  • C#中神器类BlockingCollection的实现详解

    C#中神器类BlockingCollection的实现详解 什么是BlockingCollection BlockingCollection 是 C# 中一个非常有用的线程安全的集合类,用于在多线程并发环境下进行数据的读取、写入和处理。它的用途非常广泛,比如在生产者-消费者模型中,用于协调生产者和消费者之间的数据传输,以及在大数据处理中,用于使用多个线程处理…

    C# 2023年5月31日
    00
  • C#事务处理(Execute Transaction)实例解析

    C#事务处理(Execute Transaction)实例解析 在C#开发中,事务处理常常用于保证数据库操作的原子性,确认一组操作要么全部成功,要么全部不成功。在本文中,我们将通过实例解析的方式来详细讲解C#事务处理的使用方法。 什么是事务处理? 在数据库操作中,事务处理是一种将多个操作作为一个不可分割的操作序列执行的机制。当多个操作被包含在一个事务中时,这…

    C# 2023年5月31日
    00
  • C#加解密之DES算法的实现

    C#加解密之DES算法的实现 简介 DES是一种对称加密算法,常用于数据加密解密、数字签名等方面。在C#中可以使用System.Security.Cryptography命名空间中的类库来实现DES加解密功能。 实现流程 1. 创建DES对象 首先,我们需要创建一个Des类的对象,代码如下: using System.Security.Cryptograph…

    C# 2023年6月8日
    00
  • C# 服务器发送邮件失败实例分析

    让我来详细讲解一下“C#服务器发送邮件失败实例分析”的完整攻略。 问题描述 首先,我们需要明确问题的描述,即C#服务器发送邮件失败的具体表现。通常会出现以下几种情况: 邮件无法发送,没有任何错误提示。 邮件发送失败,返回错误提示信息。 邮件发送成功,但是收件人没有收到邮件。 常见问题排查步骤 接下来,我们需要分析问题并排查原因。常见的问题排查步骤包括: 检查…

    C# 2023年5月14日
    00
  • ADO.NET通用数据库访问类

    让我们来详细讲解一下ADO.NET通用数据库访问类的完整攻略。 ADO.NET通用数据库访问类简介 ADO.NET通用数据库访问类是一种通用的数据访问类,它可以与多种不同的数据库进行交互,例如 SQL Server、MySQL、Oracle、SQLite 等等。它提供了一系列的 API,使我们能够轻松地对数据库进行操作。 ADO.NET通用数据库访问类的操作…

    C# 2023年5月31日
    00
  • 常用类之TCP连接类-socket编程

    下面是关于“常用类之TCP连接类-socket编程”的完整攻略。 1. TCP连接类介绍 在进行socket网络编程时,我们需要使用到TCP连接类,该类被封装成了Python的socket库。它是一种基于客户机/服务器模式的、可靠的、面向连接的、传输层通信协议,它在应用层和TCP/IP协议族的传输层之间进行数据传输。使用TCP连接类,我们可以轻松实现实时通信…

    C# 2023年6月7日
    00
  • 体验.NET与文件存储服务MinIO

    对象文件存储服务(OSS)主要用于存储零散的文件,和直接存储到本地文件系统中相比,有以下的几个优势: 跨服务器可用 兼容Amazon S3 API 横向扩容 高可用 支持加密 MinIO就是一个高性能的文件服务,我们使用.NET来操作一下。 部署MinIO 最简单的办法,就是在Docker上运行MinIO。可以使用以下命令启动MinIO: docker ru…

    C# 2023年4月19日
    00
合作推广
合作推广
分享本页
返回顶部