ASP.NETMVC 分页
<div class="text-center">
<span style="display:inline-block; position:relative;top:-30px;">共 @Model.TotalPageCount 页 @Model.TotalItemCount 条记录,当前为第 @Model.CurrentPageIndex 页</span>
@Ajax.Pager(Model, new PagerOptions
{
/*
* 设置分页显示的样式
*/
FirstPageText = "首页",
LastPageText = "最后一页",
NextPageText = "下一页",
PrevPageText = "上一页",
PageIndexParameterName = "PageId",
ContainerTagName = "ul",
CssClass = "pagination",
CurrentPagerItemTemplate = "<li class=\"active\"><a href=\"#\">{0}</a></li>",
DisabledPagerItemTemplate = "<li class=\"disabled\"><a>{0}</a></li>",
PagerItemTemplate = "<li>{0}</li>"
},
new MvcAjaxOptions
{
HttpMethod = "post",
UpdateTargetId = "partList",//更新数据的标签ID
DataFormId = "form0" //分页对应的条件搜索表单ID
})
</div>
这是前台页面,直接复制到前台最下面即可!
This file is part of MvcPager.
Copyright 2009-2015 Webdiyer(http://en.webdiyer.com)
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
var Webdiyer = Webdiyer || {};
Webdiyer.MvcPagers = [];
Webdiyer.MvcPagers.getById = function (id) {
for (var i = 0; i <= this.length; i++) {
if (typeof this[i] !== "undefined" && this[i].id === id) {
return this[i];
}
}
return null;
};
Webdiyer.__ajaxPages = {}; //Ajax page parameters, preventing multiple MvcPager with same UrlPageIndexName trigger multiple http requests
this.wrapper = wrapper;
};
wrapper: null,
id: null,
urlFormat: null,
pageIndexName: null,
updateTarget: null,
onBegin: null,
onComplete: null,
onFailure: null,
onSuccess: null,
httpMethod: null,
confirm: null,
loadingElementId: null,
loadingDuration: 0,
partialLoading: null,
currentPageIndex: null,
dataFormId: null,
allowCache: true,
enableHistorySupport: null,
//autoSubmitForm: null,
searchCriteria: null,
pageCount: null,
invalidPageErrMsg: null,
outOfRangeErrMsg: null,
firstPageUrl: null,
pageIndexBox: null,
goToButton: null,
maxPageIndexItems: 20,
isAjaxPager: null,
onError: null,
isFirstLoading: true,
allowReload: false, //used by search form to check if reload is needed even current page index is not changed
init: function () {
var wrapper = $(this.wrapper);
var newPageIndex = 1;
var initialPageIndex; //value of the page index when page is loaded first time, if go back to this page we need to load the correct data by checking this value(it's not necessarily to be 1)
this.id = wrapper.attr("id");
this.isAjaxPager = wrapper.data("ajax") || false;
this.pageCount = wrapper.data("pagecount");
this.invalidPageErrMsg = wrapper.data("invalidpageerrmsg");
this.outOfRangeErrMsg = wrapper.data("outrangeerrmsg");
this.firstPageUrl = wrapper.data("firstpage");
this.urlFormat = wrapper.data("urlformat");
this.pageIndexName = wrapper.data("pageparameter");
this.currentPageIndex = wrapper.data("currentpage") || 1;
this.pageIndexBox = wrapper.data("pageindexbox");
this.goToButton = wrapper.data("gotobutton");
this.maxPageIndexItems = wrapper.data("maxitems") || 20;
this.onError = wrapper.data("onerror") || "alert(errMsg)";
var context = this;
if (this.isAjaxPager) {
this.updateTarget = wrapper.data("ajax-update");
this.onBegin = wrapper.data("ajax-begin");
this.onComplete = wrapper.data("ajax-complete");
this.onFailure = wrapper.data("ajax-failure");
this.onSuccess = wrapper.data("ajax-success");
this.confirm = wrapper.data("ajax-confirm") || undefined;
this.httpMethod = wrapper.data("ajax-method") || "GET";
this.loadingElementId = wrapper.data("ajax-loading") || undefined;
this.dataFormId = wrapper.data("ajax-dataformid") || undefined;
this.allowCache = wrapper.data("ajax-allowcache") || true;
var history = wrapper.data("ajax-enablehistorysupport");
this.enableHistorySupport = (typeof history === "undefined" ? true : history);
//this.autoSubmitForm = wrapper.data("ajax-autosubmitform") || false;
this.loadingDuration = wrapper.data("ajax-loading-duration") || 0;
this.partialLoading = wrapper.data("ajax-partialloading") || false;
initialPageIndex = this.currentPageIndex;
var pagerSelector = "[data-pagerid='Webdiyer.MvcPager']";
var hashIndex = this.__getPageIndex(this.pageIndexName);
if (hashIndex !== this.currentPageIndex && hashIndex > 0)
{ this.__ajax(hashIndex, { type: this.httpMethod, data: [] }); }
if (typeof this.dataFormId !== "undefined") {
var isAjaxForm = $(context.dataFormId).data("ajax") || false;
$(context.dataFormId).submit(function (event) {
context.searchCriteria = $(context.dataFormId).serializeArray();
if (isAjaxForm) {
if (context.currentPageIndex !== 1) {
context.currentPageIndex = 1;
if (context.enableHistorySupport) {
context.__setPageIndex(context.pageIndexName, -1); //prevent reloading triggered by hashchange event
context.allowReload = true;
} else {
context.__ajax(1, { type: context.httpMethod, data: [] });
}
} else {
if (typeof Webdiyer.__ajaxPages[context.pageIndexName] === "undefined")
{ context.allowReload = true; }
}
} else {
if (typeof Webdiyer.__ajaxPages[context.pageIndexName] === "undefined")
{ context.allowReload = true; }
if (context.currentPageIndex === 1) {
context.__ajax(1, { type: context.httpMethod, data: [] });
} else {
if (context.enableHistorySupport) {
context.__setPageIndex(context.pageIndexName, 1);
} else {
context.__ajax(1, { type: context.httpMethod, data: [] });
}
context.currentPageIndex = 1;
} context.allowReload = true;
event.preventDefault();
}
});
}
if (this.enableHistorySupport) {
this.__initHashChange(initialPageIndex);
}
//pagination items
$(this.updateTarget).on("click", pagerSelector + " a[data-pageindex]", function (e) {
newPageIndex = $(this).data("pageindex");
e.preventDefault();
if (context.enableHistorySupport) {
context.__setPageIndex(context.pageIndexName, newPageIndex);
} else {
context.__ajax(newPageIndex, { type: context.httpMethod, data: [] });
}
});
}
//page index box
this.__bindPageIndexBox();
return this;
},
__bindPageIndexBox: function () {
var context = this;
if (context.isAjaxPager) {
if ($.trim(context.pageIndexBox) !== "") {
if ($(context.updateTarget).find(context.pageIndexBox).length > 0) {
//page index box is inside of update target area
//check if page index box is dropdownlist and fill it with page indices
context.__fillPageIndexBox();
if ($(context.pageIndexBox).is('input:text')) {
$(context.pageIndexBox).val(context.currentPageIndex);
$(context.updateTarget).on("keydown", context.pageIndexBox, function () {
context.__validateInput(event);
});
}
if ($.trim(context.goToButton) !== "") {
$(context.updateTarget).on("click", context.goToButton, function () {
var newPageIndex = $(context.pageIndexBox).val();
context.goToPage(newPageIndex);
});
} else {
$(context.updateTarget).on("change", context.pageIndexBox, function () {
var newPageIndex = $(context.pageIndexBox).val();
context.goToPage(newPageIndex);
});
}
} else {
//page index box is outside of update target area
context.__bindBoxEvents();
}
}
} else {
//page index box
if ($.trim(context.pageIndexBox) !== "") {
context.__bindBoxEvents();
}
}
},
__bindBoxEvents: function () {
var context = this;
context.__fillPageIndexBox();
if ($(context.pageIndexBox).is('input:text')) {
$(context.pageIndexBox).val(context.currentPageIndex);
$(context.pageIndexBox).keydown(function () {
context.__validateInput(event);
});
}
if ($.trim(context.goToButton) !== "") {
$(context.goToButton).click(function () {
var newPageIndex = $(context.pageIndexBox).val();
context.goToPage(newPageIndex);
});
} else {
$(context.pageIndexBox).change(function () {
var newPageIndex = $(context.pageIndexBox).val();
context.goToPage(newPageIndex);
});
}
},
__fillPageIndexBox: function () {
var se = $(this.pageIndexBox);
if (se.prop('type') === 'select-one') {
se.empty();
var startIndex = this.currentPageIndex - (this.maxPageIndexItems / 2);
if (startIndex + this.maxPageIndexItems > this.pageCount)
{ startIndex = this.pageCount + 1 - this.maxPageIndexItems; }
if (startIndex < 1)
{ startIndex = 1; }
var endIndex = startIndex + this.maxPageIndexItems - 1;
if (endIndex > this.pageCount)
{ endIndex = this.pageCount; }
for (var i = startIndex; i <= endIndex; i++) {
se.append('<option value="' + i + '">' + i + '</option>');
}
}
se.val(this.currentPageIndex);
},
__initHashChange: function (initialPageIndex) {
var context = this;
var docMode = document.documentMode;
if ("onhashchange" in window &&
(docMode === undefined || docMode > 7)) //IE compatable mode
{
$(window).bind("hashchange", function () {
var pageIndex = context.__getPageIndex(context.pageIndexName);
if (pageIndex === 0)
{ pageIndex = initialPageIndex; } //initial page index in url without hash value,eg. when go back from articles/list/3#id=2 to articles/list/3 initialPageIndex will be 3;
context.__ajax(pageIndex, { type: context.httpMethod, data: [] });
});
} else {
var currentHash = window.location.hash;
setInterval(function () {
var pageIndex = context.__getPageIndex(context.pageIndexName);
if (window.location.hash !== currentHash) {
currentHash = window.location.hash;
if (pageIndex === 0)
{ pageIndex = initialPageIndex; }
context.__ajax(pageIndex, { type: context.httpMethod, data: [] });
}
}, 200);
}
},
__getPageIndex: function (pname) {
var hash = window.location.hash.substring(1);
if ($.trim(hash) !== "") {
var harr = hash.split('&');
for (var i = 0; i < harr.length; i++) {
var hval = harr[i].split("=");
if (hval[0].toString().toLowerCase() === pname.toString().toLowerCase()) {
return parseInt(hval[1]) || 1;
}
}
}
return 0;
},
__setPageIndex: function (pname, pindex) {
var hash = window.location.hash.substring(1);
if ($.trim(hash) === "")
{ window.location.hash = pname + "=" + pindex; }
else {
var r = new RegExp(pname + "=[^&]*", 'i');
if (!r.test(hash))
{ window.location.hash += "&" + pname + "=" + pindex; }
else {
var index = hash.replace(r, pname + "=" + pindex);
window.location.hash = index;
}
}
},
goToPage: function (pageIndex) {
var r = new RegExp("^\\s*(\\d+)\\s*$");
if (!r.test(pageIndex)) {
this.__getFunction(this.onError, ["errType", "errMsg"]).apply(this, [0, this.invalidPageErrMsg]);
return;
} else if (RegExp.$1 < 1 || RegExp.$1 > this.pageCount) {
this.__getFunction(this.onError, ["errType", "errMsg"]).apply(this, [1, this.outOfRangeErrMsg]);
return;
}
if (this.isAjaxPager) {
if (this.enableHistorySupport) {
this.__setPageIndex(this.pageIndexName, pageIndex);
} else {
this.__ajax(pageIndex, { type: this.httpMethod, data: [] });
}
} else {
if (typeof this.firstPageUrl !== "undefined" && this.firstPageUrl !== false && parseInt(pageIndex) === 1)
{ window.self.location.href = this.firstPageUrl; }
else
{ window.self.location.href = decodeURI(this.urlFormat).replace("__" + this.pageIndexName + "__", pageIndex); }
}
},
__ajax: function (index, options) {
var context = this;
if (typeof Webdiyer.__ajaxPages[context.pageIndexName] === "undefined" || Webdiyer.__ajaxPages[context.pageIndexName] !== index || context.allowReload) { //prevent duplicate ajax requests
if (index === -1 || (index === 0 && context.isFirstLoading) || (index === context.currentPageIndex && !context.allowReload)) {
return;
}
if (context.confirm && !(window.confirm(context.confirm))) {
return;
}
$.extend(options, {
url: this.urlFormat.replace("__" + context.pageIndexName + "__", index),
cache: this.allowCache,
beforeSend: function (xhr) {
var formMethod = options.type.toUpperCase();
if (!(formMethod === "GET" || formMethod === "POST")) {
xhr.setRequestHeader("X-HTTP-Method-Override", formMethod);
}
var result = context.__getFunction(context.onBegin, ["xhr"]).apply(this, arguments);
if (result !== false && typeof context.loadingElementId !== "undefined") {
$(context.loadingElementId).show(context.loadingDuration);
}
return result; //Ajax request will be cancelled if return false
},
complete: function () {
if (typeof context.loadingElementId !== "undefined") {
$(context.loadingElementId).hide(context.loadingDuration);
}
context.__fillPageIndexBox();
context.__getFunction(context.onComplete, ["xhr", "status"]).apply(this, arguments);
},
success: function (data) {
if (context.partialLoading)
{ $(context.updateTarget).html($(context.updateTarget, data).html()); }
else
{ $(context.updateTarget).html(data); }
context.currentPageIndex = index;
context.isFirstLoading = false;
context.__getFunction(context.onSuccess, ["data", "status", "xhr"]).apply(this, arguments);
},
error: context.__getFunction(context.onFailure, ["xhr", "status", "error"])
});
if (typeof context.dataFormId !== "undefined") {
context.__pushData(options.data, context.searchCriteria);
}
options.data.push({ name: "X-Requested-With", value: "XMLHttpRequest" });
var method = options.type.toUpperCase();
if (!(method === "GET" || method === "POST")) {
options.type = "POST";
options.data.push({ name: "X-HTTP-Method-Override", value: method });
}
$.ajax(options);
Webdiyer.__ajaxPages[context.pageIndexName] = index;
}
},
__pushData: function (dataArr, dataToPush) {
if (dataToPush !== null && typeof dataToPush !== "undefined") {
for (var i = 0; i < dataToPush.length; i++) {
dataArr.push({ name: dataToPush[i].name, value: dataToPush[i].value });
}
}
},
__getFunction: function (code, argNames) {
var fn = window, parts = (code || "").split(".");
while (fn && parts.length) {
fn = fn[parts.shift()];
}
if (typeof (fn) === "function") {
return fn;
} //onSuccess="functionName"
if ($.trim(code).toLowerCase().indexOf("function") === 0) {
/*jslint evil: true */
return new Function("return (" + code + ").apply(this,arguments);");
} //onSuccess="function(data){alert(data);}"
argNames.push(code);
try {
return Function.constructor.apply(null, argNames); //onSuccess="alert('hello');return false;"
} catch (e) {
alert("Error:\r\n" + code + "\r\n is not a valid callback function");
}
},
__validateInput: function (e) {
var kc;
if (window.event) {
kc = e.keyCode;
}
else if (e.which) {
kc = e.which;
}
var valideKeys = [8, 37, 39, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105];
if (kc !== null && valideKeys.indexOf(kc) < 0) {
if (e.preventDefault) {
e.preventDefault();
}
else {
event.returnValue = false;
}
}
}
};
(function ($) {
$.fn.initMvcPagers = function () {
return this.each(function () {
Webdiyer.MvcPagers.push(new Webdiyer.MvcPager(this).init());
});
};
})(jQuery);
$(function () { $("[data-pagerid='Webdiyer.MvcPager']").initMvcPagers(); });
ASP.NETMVC 分页的更多相关文章
- asp.net分页控件
一.说明 AspNetPager.dll这个分页控件主要用于asp.net webform网站,现将整理代码如下 二.代码 1.首先在测试页面Default.aspx页面添加引用 <%@ Reg ...
- .NET/ASP.NETMVC 大型站点架构设计—迁移Model元数据设置项(自定义元数据提供程序)
阅读目录: 1.需求背景介绍(Model元数据设置项应该与View绑定而非ViewModel) 1.1.确定问题域范围(可以使用DSL管理问题域前提是锁定领域模型) 2.迁移ViewModel设置到外 ...
- .NET/ASP.NETMVC 深入剖析 Model元数据、HtmlHelper、自定义模板、模板的装饰者模式(三)
阅读目录: 7.HtmlHelper.HtmlHelper<T>中的ViewModel的类型推断 8.控制ViewModel中的某个属性的呈现(使用PartialView部分视图细粒度控制 ...
- 一步一步搭框架(asp.netmvc+easyui+sqlserver)-03
一步一步搭框架(asp.netmvc+easyui+sqlserver)-03 我们期望简洁的后台代码,如下: using System; using System.Collections.Gener ...
- 一步一步搭框架(asp.netmvc+easyui+sqlserver)-02
一步一步搭框架(asp.netmvc+easyui+sqlserver)-02 我们期望简洁带前台代码,如下: <table id="dataGrid" class=&quo ...
- 一步一步搭框架(asp.netmvc+easyui+sqlserver)-01
一步一步搭框架(asp.netmvc+easyui+sqlserver)-01 要搭建的框架是企业级开发框架,适用用企业管理信息系统的开发,如:OA.HR等 1.框架名称:sampleFrame. 2 ...
- asp.net 分页-自己写分页控件
去年就发表过asp.net 分页-利用后台直接生成html分页 ,那种方法只是单纯的实现了分页,基本不能使用,那时就想写个自己的分页控件,无奈能力有限.最近有点时间了,就自己做出了这个分页控件.我承认 ...
- Winserver2008R2 .netframework4.5 asp.netmvc 访问出现的是文件列表。
Winserver2008R2 .netframework4.5 asp.netmvc 访问出现的是文件列表,服务器需要安装如下的补丁,才可正常访问. http://www.microsoft.com ...
- (转)asp.net分页存储过程
Asp.Net分页存储过程 SQL分页语句 一.比较万能的分页: sql代码: 1 2 3 select top 每页显示的记录数 * from topic where id not in (sel ...
随机推荐
- 阿里云ECS云服务器的简单使用
随着云服务的推广与普及,越来越多的人开始接触到云服务器.然而有些人购买后却不知从何下手,今天就来看下阿里云服务器的使用吧! 一.购买完阿里云服务器后进入阿里云官网首页点击控制台 找到所购买的云产品项点 ...
- Android resource compilation failed
报错:Android resource compilation failed D:\android\EasySports\app\build\intermediates\incremental\mer ...
- 学习ELk之----02. Elastic Search操作入门
我们将使用Postman来进行日志写入操作.Postman的下载地址,你可以Google一下. 1. 在上一节中,我们启动完成ELK的Docker后,可以在浏览器中打开:http://192.168. ...
- SpringBoot2.0之七 实现页面和后台代码的热部署
开发过程中我可能经常会因为修改一点点代码就需要重启项目而烦恼,这样不仅很繁琐,还会因为不断重启浪费大量的时间,无法提高工作效率.可是现在SpringBoot为我们提供了非常简单的方式让我们实现热部署. ...
- Arduino入门笔记(5):1602液晶实验(实现时钟)
转载请注明:@小五义 http://www.cnblogs.com/xiaowuyi 欢迎加入讨论群 64770604 一.本次实验所需器材 1.Arduino板 https://item.taoba ...
- ASP.NET开发中修改代码而不重启网站
我们在做网站开发的时候,通常是写好了一个功能就要进行测试,Visual Studio上点“Start Debugging”(快捷键是F5),这是调试模式,也有直接运行模式,“Start Without ...
- Linux 桌面玩家指南:10. 没有 GUI 的时候应该怎么玩
特别说明:要在我的随笔后写评论的小伙伴们请注意了,我的博客开启了 MathJax 数学公式支持,MathJax 使用$标记数学公式的开始和结束.如果某条评论中出现了两个$,MathJax 会将两个$之 ...
- 【死磕 Spring】----- IOC 之 Spring 统一资源加载策略
原文出自:http://cmsblogs.com 在学 Java SE 的时候我们学习了一个标准类 java.net.URL,该类在 Java SE 中的定位为统一资源定位器(Uniform Reso ...
- Java数据结构和算法 - 简单排序
Q: 冒泡排序? A: 1) 比较相邻的元素.如果第一个比第二个大,就交换它们两个; 2) 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对.在这一点,最后的元素应该会是最大的数; 3) 针 ...
- 用ASP.NET Core 2.1 建立规范的 REST API -- 翻页/排序/过滤等
本文所需的一些预备知识可以看这里: http://www.cnblogs.com/cgzl/p/9010978.html 和 http://www.cnblogs.com/cgzl/p/9019314 ...