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#内置队列类Queue用法实例

    C#内置队列类Queue用法实例 本文将详细讲解C#内置队列类Queue的用法,包括如何创建队列、添加元素、删除元素、获取队列中元素数量等操作。 创建和初始化队列 在C#中,可以使用Queue类来创建一个队列。T代表存储在队列中的元素类型。我们可以在创建队列的同时指定元素类型,也可以在后续操作中动态添加元素类型。下面是一个创建包含整数的队列的示例: Queu…

    C# 2023年6月7日
    00
  • c#语言入门类型和成员

    接下来我会详细讲解一下C#语言入门类型和成员的完整攻略。 C#语言入门类型和成员 类型 在C#中,每个变量都有一个特定的类型。类型定义了变量可以存储的数据类型,以及可以对该数据类型进行的操作。C#类型可以分为三个主要的类别: 值类型 值类型变量存储在堆栈上,变量的值被直接存储在变量本身中。当一个值类型变量被分配时,它被分配在堆栈上。C#内置了许多值类型,包括…

    C# 2023年6月1日
    00
  • .Net设计模式之单例模式(Singleton)

    .Net设计模式之单例模式(Singleton) 什么是单例模式? 在软件系统中,有些类只需要存在唯一的一个实例对象,比如系统中的窗口管理器、文件系统、计时器等,这些对象在系统中只允许存在一个实例。单例模式就是为了满足这类需求而生的一种设计模式。 单例模式是指在整个应用程序中只能有一个实例对象的类。通常情况下,单例模式是指全局社区共享的一个唯一对象实例,比如…

    C# 2023年5月31日
    00
  • C#实现目录跳转(TreeView和SplitContainer)的示例代码

    下面是详细讲解“C#实现目录跳转(TreeView和SplitContainer)的示例代码”的完整攻略。 1.示例说明 在实现目录跳转的过程中,我们需要使用到TreeView控件和SplitContainer控件。其中TreeView控件用于显示文件夹和文件结构,SplitContainer控件用于分割窗体,将TreeView控件和文件内容的显示区域分开,…

    C# 2023年6月6日
    00
  • 使用JavaScript和C#中获得referer

    获取referer主要用于获取用户从哪个页面跳转而来,在前端和后端均有相应方法。在JavaScript中可以使用document.referrer进行访问,在C#中可以使用Request.Headers[“Referer”]进行访问。下面是详细的攻略。 在JavaScript中获取referer 在前端中获取referer的方法比较简单,可以使用docume…

    C# 2023年6月6日
    00
  • C#如何解析http报文

    C#语言提供了多种方式解析HTTP报文,下面我会介绍两种常用的方法。 方法一:使用全功能的HttpClient类 HttpClient类是一个全功能的类,可以用于HTTP请求、响应和解析。常用的方法如下: using System; using System.Net.Http; using System.Threading.Tasks; namespace …

    C# 2023年5月31日
    00
  • 拥有网页版小U盘 ASP.NET实现文件上传与下载功能

    拥有网页版小U盘,可以让用户通过 web 界面上传和下载文件。本攻略将介绍如何使用 ASP.NET 实现文件上传和下载功能。 实现文件上传功能 HTML 表单 首先,准备一个 HTML 表单,让用户可以选择文件并上传。 <form action="UploadFile.aspx" method="post" en…

    C# 2023年6月3日
    00
  • C#中分部类和分部方法的应用

    当我们在编写一个C#类时,该类通常会包含很多方法和属性。如果类的代码太长,它就可能会变得难以阅读和维护。为了解决这个问题,C#提供了一种将类和方法拆分成多个文件的方法。这就是分部类和分部方法的应用。 分部类 分部类指的是单个类定义在多个文件中。每个文件都包含类定义的一部分,而所有文件的内容被视为一个单独的完整类定义。在C#中,可以使用 partial 关键字…

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