asp.net 通过ajax实现无刷新分页


本文摘自PHP中文网,作者Y2J,侵删。

本篇文章主要介绍了 asp.net Mvc4 使用ajax结合分页插件实现无刷新分页,ajax通过回调函数把控制器返回的分部视图内容加载到主视图中显示,有兴趣的可以了解一下。

本文为在mvc4中使用ajax实现无刷新分页demo,记录一下。

解决方案思想:页面数据的初始加载和按页加载都是通过ajax来进行,页面分页链接点击后利用ajax技术发送当前页码到后端控制器,后端控制器根据当前页码和设置的pageSize从数据库中取出对应页的数据。后端控制器处理完后利用PartialView方法把数据返回到分部视图中,利用ViewBag来返回总记录数和pageSize。ajax通过回调函数把控制器返回的分部视图内容加载到主视图中显示。

说明:分页具体的分页导航和样式使用了kkpager插件。

1、主视图(用于显示数据)代码

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

<script src="~/Content/kkpager.js"></script>

 

<table id="result" class="posts block"></table>

<nav id="kkpager" class="posts block pagination"></nav>

<script type="text/javascript">

  $(function ()

  {

    GetArticlesData(1);

  });

  function getParameter(name) {

    var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");

    var r = window.location.search.substr(1).match(reg);

    if (r != null) return unescape(r[2]); return null;

  }

  

  function GetArticlesData(pageIndex)

  {

    var ajaxUrl = '/TestDataDB/AjaxPaging?pageIndex=' + pageIndex;

    var ajaxType = 'post';

    var ajaxDataType = 'text';

    var sucFun = function (data, status)

    {

      if (data == null && status != "success")

      {

        alert("获取数据失败!");

        return false;

      }

      else

      {

        $("#result").html(data);

        //定义分页样式

        var totalCount = parseInt('@ViewBag.TotalCount');

        var pageSize = parseInt('@ViewBag.PageSize');

        var pageNo = getParameter('pno');//该参数为插件自带,不设置好,调用数据的时候当前页码会一直显示在第一页

        if (!pageNo) {

          pageNo = 1;

        }

        var totalPages = totalCount % pageSize == 0 ? totalCount / pageSize : (parseInt(totalCount / pageSize) + 1);

        kkpager.generPageHtml({

          pno: pageNo,

          total: totalPages,

          totalRecords: totalCount,

          mode: 'click',

          click: function (n) {

            this.selectPage(n);//插件自带的方法,手动调用某一页码

            searchPage(n);

            return false;

          }

        });

      }

    }; 

    //ajax参数设置

    var Option =

          {

            url: ajaxUrl,

            type: ajaxType,

            dataType: ajaxDataType,

            cache: false, //设置为 false 将不会从浏览器缓存中加载请求信息。

            async: true, //(默认: true),所有请求均为异步请求。发送同步请求,请将此选项设置为 false。同步请求将锁住浏览器,用户其它操作必须等待请求完成才可以执行。

            timeout: 3600, //设置请求超时时间(毫秒)。此设置将覆盖全局设置。

            error: function () { },

            success: sucFun,

            beforeSend: function () { }

          };

    $.ajax(Option);

    return false;

  

  //ajax翻页

  function searchPage(n)

  {

    GetArticlesData(n);

  }

</script>

2、分部视图代码

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

@model IEnumerable<Test13.Models.TestDataDB>

@{

  ViewBag.Title = "AjaxFenbuView";

}

  <tr>

    <th>

      @Html.DisplayNameFor(model => model.Uid)

   </th>

    <th>

      @Html.DisplayNameFor(model => model.Uname)

    </th>

    <th>

      @Html.DisplayNameFor(model => model.Upwd)

    </th>

    <th>

      @Html.DisplayNameFor(model => model.Udata)

    </th>

    <th></th>

  </tr>

@foreach (Test13.Models.TestDataDB item in Model)

{

    <tr>

      <td>@item.Uid</td>

      <td>@item.Uname</td>

      <td>@item.Upwd</td>

      <td>@item.Udata</td>

      <td>

        @Html.ActionLink("编辑", "Edit", new { id=item.ID }) |

        @Html.ActionLink("查看详细", "Details", new { id=item.ID }) |

        @Html.ActionLink("删除", "Delete", new { id=item.ID })

      </td>

    </tr>

}

3、控制器获取数据代码

1

2

3

4

5

6

7

8

9

10

11

12

private readonly int pageSize =1;

   public ActionResult AjaxFenYe()

   {

     ViewBag.PageSize = pageSize;

     ViewBag.TotalCount = db.TestDataDBS.Count();

     return View();

   }

   public ActionResult AjaxPaging(int pageIndex = 1)

   {

     var persons = (from p in db.TestDataDBS orderby p.ID descending select p).Skip((pageIndex - 1) * pageSize).Take(pageSize);

     return PartialView("AjaxFenbuView", persons.ToList());

   }

最后上个效果图:

【相关推荐】

1.ASP免费视频教程

2.ASP教程

3.李炎恢ASP基础视频教程

以上就是asp.net 通过ajax实现无刷新分页的详细内容!

相关阅读 >>

.net通过母版实现页脚效果代码实例

分享asp.net内置对象之response对象教程

core web中使用appsettings.json配置文件的实例详解(asp.net )

c#中list的用法

asp.net是什么意思?asp.net框架的特性有哪些

asp.net core实例详解一

如何在asp.net core中使用cookie中间件的详细介绍

asp.net中webform的生命周期相关讲解

iis如何实现部署asp.net mvc网站的方法

asp.net通过remoting service上传文件的实例详解

更多相关阅读请进入《MVC4》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...