基于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日

相关文章

  • Asp.net Core中如何使用中间件来管理websocket

    在ASP.NET Core中,我们可以使用中间件来管理WebSocket。WebSocket是一种在Web浏览器和服务器之间进行双向通信的协议。在本文中,我们将详细讲解如何使用中间件来管理WebSocket。 安装WebSocket 在ASP.NET Core中,我们可以使用NuGet包管理器来安装WebSocket。下面是安装WebSocket的步骤: 打…

    C# 2023年5月16日
    00
  • C#调用和实现WebService,纯手工打造!

    C#调用和实现WebService,纯手工打造! 在这个教程中,我们将学习如何使用C#语言调用和实现WebService。Web服务是一种基于网络的通信协议,用于让不同的应用程序之间进行交互。Web服务提供数据和方法,供其他应用程序使用。我们将介绍如何使用C#语言编写简单的Web服务并以两个示例说明如何调用它。 实现WebService 以下是基于C#语言手…

    C# 2023年6月6日
    00
  • 快速学习c# 枚举

    快速学习C#枚举 什么是枚举? C#中的枚举类型是一种用户定义的类型,用于定义有限集合的名称。它们依赖于整数值,其值由枚举中对应的成员定义。在C#中,枚举类型非常有用,可以用于代替魔术数字和常量字符串。 如何定义一个枚举? 可以使用enum关键字来定义一个枚举数据类型。下面是定义一个示例的代码: enum Color { Red, Green, Blue }…

    C# 2023年5月31日
    00
  • asp.net(c#)判断远程图片是否存在

    当我们在使用asp.net(c#)获取远程图片时,我们需要先判断该图片是否存在。为了判断图片是否存在,我们可以使用HTTP协议的HEAD请求方法。HEAD请求方法会返回HTTP头信息,但不会返回HTTP body信息。如果返回状态码为200,说明该图片存在;如果返回状态码为404,说明该图片不存在。 下面是使用C#代码判断远程图片是否存在的完整攻略: 步骤一…

    C# 2023年6月3日
    00
  • C# StackExchange.Redis 用法汇总

    C# StackExchange.Redis 用法汇总 StackExchange.Redis 是 StackExchange(Stack Overflow 所属公司)开发的一款 Redis 客户端库。它是基于 .NET Standard 的,所以可以在各种平台上使用。StackExchange.Redis 有着良好的性能和低延迟,被广泛使用。本文将详细介绍…

    C# 2023年6月3日
    00
  • ASP.NET MVC使用Quartz.NET执行定时任务

    以下是“ASP.NET MVC使用Quartz.NET执行定时任务”的完整攻略: 什么是Quartz.NET Quartz.NET是一个开源的作业调度框架,可以用于在.NET应用程序中执行定时任务。提供了一种简单而强大的方式来调度和执行作业,支持多种触发器类型,如简单触发器、Cron触发器等。 ASP.NET MVC使用Quartz.NET执行定时任务的步骤…

    C# 2023年5月12日
    00
  • 在C#中新手易犯的典型缺陷

    在C#中,新手常常会犯下一些典型的编程缺陷。这些缺陷可能影响程序的性能,安全性或可维护性。本攻略将针对这些缺陷进行详细讲解,并提供相应的示例代码以帮助读者更好地理解。 1. 不恰当地使用字符串连接符 在C#中,字符串连接符有两种形式:+和StringBuilder。不恰当地使用字符串连接符可能会导致代码的性能下降。 示例 1:使用字符串连接符进行字符串拼接 …

    C# 2023年5月15日
    00
  • C#的加密与解密

    C#的加密与解密 C#提供了多种加密与解密方式,常见的有对称加密、非对称加密和哈希算法。 对称加密 对称加密即使用相同的密钥进行加密和解密。常见的对称加密算法有DES、AES等。 示例代码: using System.Security.Cryptography; using System.Text; public static string Encrypt(…

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