asp.net+ajax简单分页实例分析

下面是“asp.net+ajax简单分页实例分析”的完整攻略:

一、简介

本文将介绍如何使用asp.net和ajax实现简单分页。在实现分页功能的同时,还同时实现了搜索功能和动态加载数据的效果。

二、环境准备

在开始编写代码之前,需要确保以下工具和环境已经安装:

  1. Visual Studio 2017
  2. .NET Framework 4.5
  3. jQuery(最好使用最新版本)

三、代码实现

1. 准备工作

首先,需要在项目中添加以下文件:

  1. 分页用户控件Pager.ascx
  2. 相应的样式文件Pager.css

接下来,编写Pager控件的代码,用于展示分页样式,并且可以通过点击页码实现页面跳转。

<div class="pager">
    <ul>
        <li>
            <a href="#" class="prev">上一页</a>
        </li>
        <asp:Repeater ID="rptPager" runat="server">
            <ItemTemplate>
                <li>
                    <a href="#" class="page" onclick="javascript:_doPostBack('<%# Container.DataItem %>', ''); return false;">
                        <%# Container.DataItem %>
                    </a>
                </li>
            </ItemTemplate>
        </asp:Repeater>
        <li>
            <a href="#" class="next">下一页</a>
        </li>
    </ul>
</div>

其次,在.aspx页面中编写分页查询的代码。以下示例是通过从数据库中获取商品信息并进行分页展示的效果。在.aspx页面中添加以下代码:

<div class="content" id="content">
    <div class="goods-list">
        <ul id="goods-list">
        </ul>
    </div>

    <div class="goods-pager">
        <asp:Literal ID="litPager" runat="server"></asp:Literal>
    </div>
</div>

2. 实现分页

通过以上准备工作,现在可以开始编写实现分页的代码了。在.aspx页面中添加以下JavaScript代码:

<script type="text/javascript">
    $(document).ready(function () {
        var pageIndex = 1;
        var pageSize = 10;
        loadData(pageIndex);

        // 点击页码查询数据
        $(document).on('click', '.pager .page', function (event) {
            event.preventDefault();
            var index = $(this).text();
            loadData(index);
            return false;
        });

        // 点击上一页查询数据
        $(document).on('click', '.pager .prev', function (event) {
            event.preventDefault();
            if (pageIndex > 1) {
                pageIndex--;
                loadData(pageIndex);
            }
            return false;
        });

        // 点击下一页查询数据
        $(document).on('click', '.pager .next', function (event) {
            event.preventDefault();
            pageIndex++;
            loadData(pageIndex);
            return false;
        });

        function loadData(pageIndex) {
            $.ajax({
                type: "POST",
                url: "Default.aspx/GetGoodsList",
                data: '{pageIndex: ' + pageIndex + ',pageSize: ' + pageSize + '}',
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function (data) {
                    var html = '';
                    $.each(data.d, function (i, n) {
                        html += '<li><img src="' + n.ImageUrl + '" alt=""><h4>' + n.Name + '</h4><p>' + n.Description + '</p><b>¥' + n.Price + '</b></li>';
                    });
                    $('#goods-list').html(html);
                    renderPager(pageIndex, data.d[0].TotalCount, pageSize);
                },
                error: function (XMLHttpRequest, textStatus, errorThrown) {
                    alert(errorThrown);
                }
            });
        }

        // 渲染分页控件
        function renderPager(currPage, totalRecords, pageSize) {
            var maxPageCount = 10; // 分页显示最多页数,默认为10页
            var pageCount = Math.ceil(totalRecords / pageSize); // 计算分页数量
            var startIndex = 1; // 起始页码
            if (currPage > maxPageCount / 2) {
                if (pageCount - currPage < maxPageCount / 2) {
                    startIndex = pageCount - maxPageCount + 1;
                } else {
                    startIndex = currPage - Math.floor(maxPageCount / 2);
                }
            }
            var endIndex = startIndex + maxPageCount - 1;
            if (endIndex > pageCount) {
                endIndex = pageCount;
            }
            var pagerHtml = '';
            for (var i = startIndex; i <= endIndex; i++) {
                if (i == currPage) {
                    pagerHtml += '<li class="active"><a href="#" class="page">' + i + '</a></li>';
                } else {
                    pagerHtml += '<li><a href="#" class="page">' + i + '</a></li>';
                }
            }
            $('.pager ul').html(pagerHtml);
        }
    });
</script>

以上代码实现了以下功能:

  • 当页面加载完成后,会自动加载第一页的数据。
  • 当点击分页控件中的页码、上一页、下一页时,会重新加载数据并展示。
  • 当重新加载数据后,分页控件的页码会重新渲染。

3. 实现搜索

现在可以对商品信息进行搜索,即通过用户输入的关键字,查询包含该关键字的商品信息。在.aspx页面中添加以下代码:

<div class="search-box">
    <input type="text" placeholder="请输入关键字">
    <input type="button" value="搜索">
</div>

并在JavaScript中添加以下代码:

// 实现搜索
$(document).on('click', '.search-box input[type=button]', function (event) {
    event.preventDefault();
    pageIndex = 1;
    var keyword = $('.search-box input[type=text]').val();
    $.ajax({
        type: "POST",
        url: "Default.aspx/SearchGoodsList",
        data: '{keyword: "' + keyword + '",pageIndex: ' + pageIndex + ',pageSize: ' + pageSize + '}',
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (data) {
            var html = '';
            $.each(data.d, function (i, n) {
                html += '<li><img src="' + n.ImageUrl + '" alt=""><h4>' + n.Name + '</h4><p>' + n.Description + '</p><b>¥' + n.Price + '</b></li>';
            });
            $('#goods-list').html(html);
            renderPager(pageIndex, data.d[0].TotalCount, pageSize);
        },
        error: function (XMLHttpRequest, textStatus, errorThrown) {
            alert(errorThrown);
        }
    });
});

以上代码实现了搜索框的效果,当用户输入关键字并点击“搜索”按钮时,会重新加载数据并展示。

四、示例说明

以下是两个示例说明:

示例一:使用分页控件展示asp.net控件

可以通过以下代码实现使用分页控件展示asp.net控件的效果。

<%@ Register Src="~/Pager.ascx" TagPrefix="uc" TagName="Pager" %>

<%-- 使用asp.net控件展示商品列表 --%>
<asp:Repeater ID="rptGoods" runat="server">
    <ItemTemplate>
        <div>
            <img src='<%#Container.DataItem("ImageUrl") %>' />
            <h3><%#Container.DataItem("Name") %></h3>
            <p><%#Container.DataItem("Description") %></p>
            <span>¥<%#Container.DataItem("Price") %></span>
        </div>
    </ItemTemplate>
</asp:Repeater>

<%-- 使用分页控件展示分页效果 --%>
<uc:Pager ID="pager" runat="server" />

示例二:使用分页控件展示jquery渲染的商品列表

可以通过以下代码实现使用分页控件展示jquery渲染的商品列表的效果。

<div id="goods">
</div>

<div class="pager-box">
    <ul id="pager">
    </ul>
</div>
$(document).ready(function () {
    var pageSize = 10;
    getGoodsList(pageSize, 1);

    function getGoodsList(pageSize, pageIndex) {
        $.ajax({
            url: 'goodsList.json',
            dataType: 'json',
            success: function (data) {
                var html = '';
                var pageCount = Math.ceil(data.length / pageSize);
                var startIndex = (pageIndex - 1) * pageSize;
                var endIndex = startIndex + pageSize - 1;
                endIndex = endIndex >= data.length ? data.length - 1 : endIndex;
                for (var i = startIndex; i <= endIndex; i++) {
                    html += '<div>';
                    html += '<img src="' + data[i].imgUrl + '" />';
                    html += '<h3>' + data[i].name + '</h3>';
                    html += '<p>' + data[i].description + '</p>';
                    html += '<span>¥' + data[i].price.toFixed(2) + '</span>';
                    html += '</div>';
                }
                $('#goods').html(html);
                renderPager(pageIndex, pageCount);
            }
        });
    }

    function renderPager(currPage, totalPage) {
        var maxPageCount = 10;
        var startIndex = 1;
        if (currPage > maxPageCount / 2) {
            if (totalPage - currPage < maxPageCount / 2) {
                startIndex = totalPage - maxPageCount + 1;
            } else {
                startIndex = currPage - Math.floor(maxPageCount / 2);
            }
        }
        var endIndex = startIndex + maxPageCount - 1;
        if (endIndex > totalPage) {
            endIndex = totalPage;
        }
        var html = '';
        for (var i = startIndex; i <= endIndex; i++) {
            if (i == currPage) {
                html += '<li class="active"><a href="#">' + i + '</a></li>';
            } else {
                html += '<li><a href="#">' + i + '</a></li>';
            }
        }
        $('#pager').html(html);
    }

    $(document).on('click', '#pager li a', function (event) {
        event.preventDefault();
        getGoodsList(pageSize, $(this).text());
        return false;
    });
});

以上代码实现了通过ajax请求将数据展示在页面上,并且控制分页的思路。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:asp.net+ajax简单分页实例分析 - Python技术站

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

相关文章

  • C/C++数据对齐详细解析

    C/C++数据对齐详细解析 数据对齐是指在计算机中,为了提高CPU对齐内存操作的速度和效率,编译器在为结构体或类分配内存时,会按照一定的规则把各个成员变量存储到内存中。本文将通过对C/C++数据对齐原理进行详细讲解,并提供两条示例说明。 数据对齐的基本原理 数据对齐是因为CPU在访问内存时,访问未对齐的内存会比对齐的内存更慢。为了访问内存更加高效,CPU要求…

    C# 2023年6月8日
    00
  • 详解C#中一维数组的插入

    下面我将针对“详解C#中一维数组的插入”进行完整的介绍。 插入一维数组 在C#中插入一维数组,我们可以使用数组的 Array.Copy() 和 Array.Resize() 方法。下面分别介绍这两个方法的用法: 1.使用Array.Copy()方法 int[] arr = { 1, 2, 3, 4, 5 }; //初始数组 int[] arrNew = ne…

    C# 2023年6月7日
    00
  • C#实现计算器功能

    要实现一个计算器功能,可以按照以下步骤进行: 1.界面设计和布局 首先需要设计计算器的UI界面,比如可以使用Windows Forms创建一个窗口应用程序,利用Windows Forms提供的控件来设计计算器的界面,如TextBox、Button和Label等。 在界面中需要放置输入输出框(TextBox)、各种操作符(Button)以及结果显示区域(Lab…

    C# 2023年6月1日
    00
  • C#实现较为实用的SQLhelper

    C#实现较为实用的SQLhelper完整攻略 1. SQLhelper是什么? SQLhelper是在C#中操作数据库的工具库,它通过对ADO.NET的封装和简化,让我们在操作数据库的时候更加方便、快捷和安全。 2. 使用步骤 2.1 引入命名空间 要使用SQLhelper,首先需要在项目中引入SqlClient命名空间。 using System.Data…

    C# 2023年6月2日
    00
  • C#编程总结(一)序列化总结

    下面是关于“C#编程总结(一)序列化总结”的完整攻略,包含两个示例。 1. 序列化总结 在C#编程中,序列化是将对象转换为可存储或可传输格式的过程。反序列化是将序列化的数据转换回对象的过程。C#提供了多种序列化方式,包括二进制序列化、XML序列化和JSON序列化等。以下是C#编程中序列化的总结: 1.1 二进制序列化 二进制序列化是将对象转换为二进制格式的过…

    C# 2023年5月15日
    00
  • 哔哩哔哩Android项目编译优化

    哔哩哔哩Android项目编译优化 在Android开发中,编译时间是一个非常重要的因素。本文将介绍如何优化哔哩哔哩Android项目的编译时间。 步骤1:使用Gradle的Build Cache Gradle的Build Cache可以缓存已编译的文件,以便在下一次编译时重用它们。以下是一个示例: buildCache { local { enabled …

    C# 2023年5月15日
    00
  • C# 泛型List排序的实现

    当我们使用C#进行编程时经常需要对一个集合或列表进行排序。使用泛型List时,可以很方便地实现列表排序。本文将详细讲解C#泛型List排序的实现过程。 1. List排序方法 – Sort() List类提供了很多内置的排序方法。其中Sort()方法是实现排序的最常用方法。该方法使用快速排序算法来对列表中的元素进行排序。下面是一个示例代码: List<…

    C# 2023年6月1日
    00
  • C#并行编程之信号量

    下面将详细讲解C#并行编程之信号量的完整攻略。 1. 什么是信号量 信号量是一种常见的线程同步机制,它可以限制同时访问共享资源的线程数量。在C# 中,我们可以通过System.Threading.Semaphore类来实现信号量机制。 2. 如何使用信号量 使用Semaphore类,可以在C# 中实现信号量机制。Semaphore类提供两个主要的方法Wait…

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