Cet article est une démonstration de l'utilisation d'ajax pour implémenter une pagination sans actualisation dans mvc4, enregistrez-la.
Idée de solution : le chargement initial des données de page et le chargement page par page sont tous deux effectués via ajax. Après avoir cliqué sur le lien de pagination de la page, la technologie ajax est utilisée pour envoyer le numéro de page actuel à. le contrôleur back-end. Le contrôleur back-end Récupère les données de la page correspondante de la base de données en fonction du numéro de page actuel et de la taille de page définie. Une fois le traitement terminé par le contrôleur principal, utilisez la méthode PartialView pour renvoyer les données à la vue partielle et utilisez ViewBag pour renvoyer le nombre total d'enregistrements et pageSize. Ajax charge le contenu de la vue partielle renvoyé par le contrôleur dans la vue principale pour l'afficher via la fonction de rappel.
Remarque : La navigation et le style de pagination spécifiques utilisent le plug-in kkpager.
1. Code de la vue principale (utilisé pour afficher les données)
<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. Code de la vue partielle
@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. 🎜>
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()); }