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日

相关文章

  • unity实现鼠标经过时ui及物体的变色操作

    实现鼠标经过时UI及物体的变色操作是Unity游戏开发中常见的操作之一,在以下内容中,我将详细讲解如何实现这个功能。 步骤一:添加事件触发器组件 首先,在需要变色的UI或物体上添加Event Trigger组件。在该组件下选择PointerEnter和PointerExit事件,并在事件右侧选择Add New。这样就可以添加新的触发事件。 在PointerE…

    C# 2023年6月3日
    00
  • C#用dynamic一行代码实现反射操作

    dynamic简介 dynamic是.NET Framework4.0的新特性。dynamic的出现让C#具有了弱语言类型的特性。编译器在编译的时候不再对类型进行检查,编译时默认dynamic对象支持你想要的任何特性。 dynamic简化反射实现 使用dynamic来简化反射实现是一种比较常见的编程技巧,它可以减少代码的复杂性并提高可读性。下面是一个使用dy…

    C# 2023年4月28日
    00
  • C# 操作Windows注册表的实现方法

    下面是详细讲解“C# 操作Windows注册表的实现方法”的完整攻略: 介绍 Windows注册表是Windows操作系统的一个基本部分,它是一个分层的数据库,存储着所有的系统和应用程序的配置信息。在C#程序中,我们可以使用Microsoft.Win32命名空间来访问Windows注册表,并进行读、写、删除等操作。 读取注册表项信息 在C#程序中,我们可以使…

    C# 2023年6月7日
    00
  • HTML+CSS+JavaScript做女朋友版的刮刮乐(一看就会)

    让我来给你详细讲解一下如何用HTML、CSS和JavaScript开发女朋友版的刮刮乐吧! 1. 确定页面布局 首先,我们需要确定页面的布局。在此示例中,我们将使用如下的HTML结构: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> …

    C# 2023年5月15日
    00
  • C# GetEnumerator():返回 IEnumerator 对象,它可用于循环访问集合中的元素

    C#中的GetEnumerator()方法可用于实现自定义迭代器。它基本上是 .NET 迭代器的基础,并且为 LINQ 提供了一个极好的风格。 GetEnumerator()方法概述 GetEnumerator()方法返回一个实现了 IEnumerator 接口的对象。这个接口定义了当前集合中某个位置的元素,以及如何在一个集合中移动以访问其他元素。 实现方式…

    C# 2023年4月19日
    00
  • C# TaskScheduler任务调度器的实现

    下面是详细讲解 “C# TaskScheduler任务调度器的实现” 的完整攻略: 1. 什么是C# TaskScheduler任务调度器 TaskScheduler任务调度器是一个在 .NET Framework中提供的接口,它允许您将任务提交给 .NET 线程池,并使这些任务在未来的某个时刻运行。使用任务调度器,可以创建多种不同的计划,以便在特定的情况下…

    C# 2023年6月6日
    00
  • C#实现进制转换

    C#实现进制转换的完整攻略 在C#中,要实现进制转换可以使用Convert类提供的方法,主要有以下三个: ToInt32:将指定的字符串转换为32位带符号整数。 ToString:将指定的数字转换为字符串。 Parse:将字符串表示形式转换为等效的数字表示形式。 十进制转二进制 定义一个十进制数 int number = 123; 将其转换为二进制数 str…

    C# 2023年6月6日
    00
  • 记一次 .NET 某设备监控系统 死锁分析

    一:背景 1. 讲故事 上周看了一位训练营朋友的dump,据朋友说他的程序卡死了,看完之后发现是一例经典的死锁问题,蛮有意思,这个案例算是学习 .NET高级调试 入门级的案例,这里和大家分享一下。 二:WinDbg 分析 1. 程序为什么会卡死 因为是窗体程序,所以看主线程的线程栈就好了,如果卡在 用户态 那这个问题相对容易解决,如果卡在 内核态 这个问题就…

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