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 ...
随机推荐
- Android组件化开发的简单应用
组件化开发的主要步骤: 一.新建Modules 1.新建Project,作为应用的主Module. 2.新建Module:"Common",类型选择"Android Li ...
- 关于ORACLE的各种操作~持续汇总~
增.删.改: 增加所有 INSERT INTO 表名 VALUES(序列名.NEXTVAL,'值1','值2','值3','值4','值5'); 指定增加 INSERT INTO 表名(字段1,字段2 ...
- python3 树莓派 + usb摄像头 做颜色识别 二维码识别
今天又啥也没干 我完蛋了哦 就是没办法沉下心来,咋办....还是先来条NLP吧.. 七,凡事必有至少三个解决方法 对事情只有一个方法的人,必陷入困境,因为别无选择. 对事情有两个方法的人也陷入困境, ...
- JVM之GC算法、垃圾收集算法——标记-清除算法、复制算法、标记-整理算法、分代收集算法
标记-清除算法 此垃圾收集算法分为“标记”和“清除”两个阶段: 首先标记出所有需要回收的对象,在标记完成后统一回收所有被标记对象,它的标记过程前面已经说过——如何判断对象是否存活/死去 死去的对象就会 ...
- ASP.NET Core 身份验证(一)
前言 这篇文章我想带领大家了解一下 ASP.NET Core 中如何进行的身份验证,在开始之前强烈建议还没看过我写的 Identity 系列文章的同学先看一下. Identity 入门系列文章: Id ...
- 从 RegExp 构造器看 JS 字符串转义设计
多年前我第一次入职腾讯的时候,DC 从杭州给我寄来了一本他刚翻译出炉的<高性能 JavaScript>.那段时间为了帮忙校对,我仔细阅读了书中的每一个段落,结果积累了不少 JavaScri ...
- js生成[n,m]的随机数,js如何生成随机数,javascript随机数Math.random()
一.预备知识 Math.ceil(); //向上取整. Math.floor(); //向下取整. Math.round(); //四舍五入. Math.random(); //0.0 ~ 1 ...
- 不带parent指针的successor求解
问题: 请设计一个算法,寻找二叉树中指定结点的下一个结点(即中序遍历的后继).给定树的根结点指针TreeNode* root和结点的值int p,请返回值为p的结点的后继结点的值.保证结点的值大于等于 ...
- Flask python初期九九乘法表
from flask import Flask #导入 app = Flask(__name__) @app.route('/') def index(): res=" " ...
- 腾讯短信服务精简版(PHP )
短信视乎已经被慢慢淡出平常的交流工具队列,但始终抹不去它的存在,短信验证码视乎从未被取代,此外在重要的信息通知的地位也是不可取的的.所以了解短信的使用是开发中很有必要的一环. 腾讯云的短信服务提供有1 ...