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 ...
随机推荐
- 用animation的steps属性制作帧动画
昨天火急火燎地接到一个任务,说是要做一个掷骰子的游戏,关于掷骰子期间的过渡动画,我本来是想用css 3d制作一个立体的骰子,然后叫UI给6张平面图贴上去.再用translate3d来操作.然而UI考虑 ...
- React 项目生产版本迭代页面不刷新问题
React 页面缓存 react 打包项目进行服务端部署后,会发现index.html被浏览器缓存,访问项目url指向的还是上个版本的内容.原理是index.html被缓存后,路由指向和跳转都是旧版的 ...
- 阿里云RDS for SQL Server测试吐槽
最近测试了一下阿里云RDS for SQL Server,有些设计简直就是反人类,让人不得不吐槽一番. 1:控制台创建数据库时,数据库名不能包含大小字母. 如上截图所示,数据库名称不能包含大写字母,好 ...
- .Net Core 在Linux服务器下部署程序--(2). 部署前需要安装的软件及SDK
安装通用软件 : ping , telnet , lrzsz , zip , wget 安装ping软件,用于测试当前服务器与其他服务器之间的网络通畅情况,和Windows的Ping类似 执行ping ...
- WinServer设置多用户登录
1.运行 gpedit.msc →computer configuration→administrative templates→windows componets→Remote Desktop→Re ...
- 关于加载font-awesome文字显示不出来
关于font-awesome的网站 中文网:http://www.fontawesome.com.cn/get-started/ 官网:https://fontawesome.com/ 中文网4.7: ...
- 【English】20190428
It is of paramount importance that极为重要的一点[pærəmaʊnt] strategizing around SOA围绕soa制定战略 efficient gov ...
- k8s实战之从私有仓库拉取镜像 - kubernetes
1.实战目的 从私有docker仓库拉取镜像,部署pod.上一篇中,我们搭建了私有的镜像仓库,这一篇我们将与k8s结合实战使用私有仓库. 2.登录docker 为了完成本次实战,需要登录docker, ...
- 【RL-TCPnet网络教程】第39章 RL-TCPnet之TFTP服务器
第39章 RL-TCPnet之TFTP服务器 本章节为大家讲解RL-TCPnet的TFTP服务器应用,学习本章节前,务必要优先学习第38章的TFTP基础知识.有了这些基础知识之后,再搞本章节会 ...
- js判断参数是否为非数字
isNaN() 函数用于检查其参数是否是非数字值.