ASP.NET如何使用ajax实现分页局部刷新页面功能

来源:AI视频音频作者:深圳GEO公司头衔:草根站长
导读:本期聚焦于小伙伴创作的《ASP.NET如何使用ajax实现分页局部刷新页面功能》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《ASP.NET如何使用ajax实现分页局部刷新页面功能》有用,将其分享出去将是对创作者最好的鼓励。

功能实现原理

ASP.NET结合ajax实现分页局部刷新的核心思路是,前端通过ajax向后台发送分页参数,后台根据参数查询对应的数据集合,再将数据和分页信息返回给前端,前端只更新展示数据的区域,不会触发整个页面的重新加载。

ASP.NET如何使用ajax实现分页局部刷新页面功能

环境准备

首先需要在项目中引入jQuery库,用于简化ajax请求的编写,同时准备一个用于存储分页数据的数据库表,本文以用户信息表为例,表结构包含用户ID、用户名、年龄、注册时间四个字段。

前端页面实现

前端页面需要包含数据展示区域、分页导航区域,以及发送ajax请求的脚本逻辑,具体代码如下:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>ajax分页示例</title>
    <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
    <style>
        .data-table {
            width: 80%;
            border-collapse: collapse;
            margin: 20px auto;
        }
        .data-table th, .data-table td {
            border: 1px solid #ddd;
            padding: 8px;
            text-align: center;
        }
        .data-table th {
            background-color: #f2f2f2;
        }
        .pagination {
            text-align: center;
            margin-top: 20px;
        }
        .pagination a {
            margin: 0 5px;
            padding: 5px 10px;
            border: 1px solid #ddd;
            text-decoration: none;
            color: #333;
        }
        .pagination a.current {
            background-color: #007bff;
            color: white;
            border-color: #007bff;
        }
    </style>
</head>
<body>
    <h2 style="text-align:center;">用户信息分页列表</h2>
    <!-- 数据展示区域 -->
    <div id="dataContainer">
        <table class="data-table">
            <thead>
                <tr>
                    <th>用户ID</th>
                    <th>用户名</th>
                    <th>年龄</th>
                    <th>注册时间</th>
                </tr>
            </thead>
            <tbody id="dataBody">
                <!-- ajax返回的数据会填充到这里 -->
            </tbody>
        </table>
    </div>
    <!-- 分页导航区域 -->
    <div class="pagination" id="paginationContainer">
        <!-- 分页按钮会动态生成到这里 -->
    </div>

    <script type="text/javascript">
        // 页面加载完成后默认加载第一页数据
        $(function () {
            loadPageData(1);
        });

        // 加载指定页的数据
        function loadPageData(pageIndex) {
            $.ajax({
                url: "UserHandler.ashx", // 后台处理接口地址
                type: "POST",
                data: {
                    pageIndex: pageIndex, // 当前页码
                    pageSize: 10 // 每页显示条数
                },
                dataType: "json",
                success: function (response) {
                    if (response.code === 0) {
                        renderData(response.data.list); // 渲染数据列表
                        renderPagination(response.data.pageIndex, response.data.totalPages); // 渲染分页导航
                    } else {
                        alert("加载数据失败:" + response.msg);
                    }
                },
                error: function () {
                    alert("请求后台接口失败");
                }
            });
        }

        // 渲染数据列表
        function renderData(list) {
            var html = "";
            if (list.length === 0) {
                html = "<tr><td colspan='4'>暂无数据</td></tr>";
            } else {
                for (var i = 0; i < list.length; i++) {
                    var item = list[i];
                    html += "<tr>";
                    html += "<td>" + item.UserId + "</td>";
                    html += "<td>" + item.UserName + "</td>";
                    html += "<td>" + item.Age + "</td>";
                    html += "<td>" + item.RegisterTime + "</td>";
                    html += "</tr>";
                }
            }
            $("#dataBody").html(html);
        }

        // 渲染分页导航
        function renderPagination(currentPage, totalPages) {
            var html = "";
            // 上一页按钮
            if (currentPage > 1) {
                html += "<a href='javascript:;' onclick='loadPageData(" + (currentPage - 1) + ")'>上一页</a>";
            }
            // 页码按钮
            for (var i = 1; i <= totalPages; i++) {
                if (i === currentPage) {
                    html += "<a href='javascript:;' class='current'>" + i + "</a>";
                } else {
                    html += "<a href='javascript:;' onclick='loadPageData(" + i + ")'>" + i + "</a>";
                }
            }
            // 下一页按钮
            if (currentPage < totalPages) {
                html += "<a href='javascript:;' onclick='loadPageData(" + (currentPage + 1) + ")'>下一页</a>";
            }
            $("#paginationContainer").html(html);
        }
    </script>
</body>
</html>

后台接口实现

后台使用一般处理程序(ashx)接收前端请求,处理分页逻辑并返回数据,具体代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Script.Serialization;
using System.Data;
using System.Data.SqlClient;

namespace AjaxPaginationDemo
{
    /// <summary>
    /// 用户数据处理接口
    /// </summary>
    public class UserHandler : IHttpHandler
    {
        // 数据库连接字符串,根据实际环境修改
        private string connStr = "Server=.;Database=TestDB;Uid=sa;Pwd=123456";

        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "application/json";
            string result = "";
            try
            {
                // 获取前端传递的分页参数
                int pageIndex = Convert.ToInt32(context.Request["pageIndex"]);
                int pageSize = Convert.ToInt32(context.Request["pageSize"]);
                if (pageIndex < 1) pageIndex = 1;
                if (pageSize < 1) pageSize = 10;

                // 查询数据总条数
                int totalCount = GetTotalUserCount();
                // 计算总页数
                int totalPages = (int)Math.Ceiling((double)totalCount / pageSize);
                if (pageIndex > totalPages) pageIndex = totalPages;

                // 查询当前页的数据
                List<UserInfo> userList = GetUserListByPage(pageIndex, pageSize);

                // 构造返回结果
                var response = new
                {
                    code = 0,
                    msg = "success",
                    data = new
                    {
                        pageIndex = pageIndex,
                        pageSize = pageSize,
                        totalCount = totalCount,
                        totalPages = totalPages,
                        list = userList
                    }
                };
                JavaScriptSerializer serializer = new JavaScriptSerializer();
                result = serializer.Serialize(response);
            }
            catch (Exception ex)
            {
                var errorResponse = new
                {
                    code = -1,
                    msg = ex.Message,
                    data = (object)null
                };
                JavaScriptSerializer serializer = new JavaScriptSerializer();
                result = serializer.Serialize(errorResponse);
            }
            context.Response.Write(result);
        }

        // 获取用户总条数
        private int GetTotalUserCount()
        {
            int count = 0;
            string sql = "SELECT COUNT(1) FROM UserInfo";
            using (SqlConnection conn = new SqlConnection(connStr))
            {
                conn.Open();
                SqlCommand cmd = new SqlCommand(sql, conn);
                count = Convert.ToInt32(cmd.ExecuteScalar());
            }
            return count;
        }

        // 分页查询用户数据
        private List<UserInfo> GetUserListByPage(int pageIndex, int pageSize)
        {
            List<UserInfo> list = new List<UserInfo>();
            // 使用OFFSET FETCH分页,SQL Server 2012及以上版本支持
            string sql = @"SELECT UserId, UserName, Age, RegisterTime 
                          FROM UserInfo 
                          ORDER BY UserId 
                          OFFSET @Offset ROWS FETCH NEXT @PageSize ROWS ONLY";
            int offset = (pageIndex - 1) * pageSize;
            using (SqlConnection conn = new SqlConnection(connStr))
            {
                conn.Open();
                SqlCommand cmd = new SqlCommand(sql, conn);
                cmd.Parameters.AddWithValue("@Offset", offset);
                cmd.Parameters.AddWithValue("@PageSize", pageSize);
                SqlDataReader reader = cmd.ExecuteReader();
                while (reader.Read())
                {
                    UserInfo user = new UserInfo();
                    user.UserId = Convert.ToInt32(reader["UserId"]);
                    user.UserName = reader["UserName"].ToString();
                    user.Age = Convert.ToInt32(reader["Age"]);
                    user.RegisterTime = Convert.ToDateTime(reader["RegisterTime"]).ToString("yyyy-MM-dd HH:mm:ss");
                    list.Add(user);
                }
            }
            return list;
        }

        public bool IsReusable
        {
            get { return false; }
        }
    }

    // 用户信息实体类
    public class UserInfo
    {
        public int UserId { get; set; }
        public string UserName { get; set; }
        public int Age { get; set; }
        public string RegisterTime { get; set; }
    }
}

注意事项

  • 前端ajax请求的url地址需要和实际后台接口地址保持一致,如果接口部署在其他路径需要做对应修改。
  • 数据库连接字符串需要根据实际的数据库环境调整,确保能够正常连接数据库。
  • 分页查询的SQL语句如果使用低版本SQL Server,需要替换成对应的分页写法,比如使用ROW_NUMBER()函数实现分页。
  • 前端分页导航的样式可以根据实际需求调整,本文提供的是基础样式,可适配大多数场景。

功能测试

将前端页面和后台接口部署到IIS或者ASP.NET开发服务器中,访问前端页面,点击分页导航的不同页码,可以看到只有数据区域的内容发生变化,页面其他部分不会刷新,说明ajax分页局部刷新功能已经实现成功。

ASP.NETajax分页局部刷新修改时间:2026-06-07 01:14:37

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。