MVC4 5分页控件,支持Ajax AjaxOption支持
MVC4 5分页控件,支持Ajax AjaxOption支持 /// <summary>
/// MVC4 5分页控件,支持Ajax AjaxOption支持 beta 1.0
/// 用法
/// @Ajax.Pages
/// @Html.Pages
/// </summary>
public static class PagesExtension
{
public static MvcHtmlString Pages(this HtmlHelper htmlHelper, int rowCount, int pageSize, string url, string option = "")
{
if (rowCount <= pageSize)
{
return new MvcHtmlString("");
}
string str = string.IsNullOrEmpty(url) ? HttpContext.Current.Request.Url.AbsolutePath : url;
string str2 = HttpContext.Current.Request.Url.Query.Trim(new char[] { '?' });
StringBuilder builder = new StringBuilder();
string[] strArray = str2.Split(new char[] { '&' });
foreach (string str3 in strArray)
{
if ((str3.Length > ) && !str3.StartsWith("page="))
{
string[] strArray2 = str3.Split(new char[] { '=' });
if (strArray2.Length == )
{
builder.AppendFormat("&{0}={1}", strArray2[], HttpContext.Current.Server.UrlEncode(strArray2[]));
}
}
} string htmlString = GetPaginationHtml(rowCount, pageSize, str, builder.ToString() + option); return new MvcHtmlString(htmlString);
} public static MvcHtmlString Pages(this AjaxHelper ajaxHelper, int rowCount, int pageSize, string formAction, AjaxOptions ajaxOptions, string option = "")
{
if (rowCount <= pageSize)
{
return new MvcHtmlString("");
} //组装表单
TagBuilder tagBuilder = new TagBuilder("form");
tagBuilder.MergeAttributes<string, object>(HtmlHelper.AnonymousObjectToHtmlAttributes(null));
tagBuilder.MergeAttribute("action", formAction);
tagBuilder.MergeAttribute("method", "post");
ajaxOptions = GetAjaxOptions(ajaxOptions);
if (ajaxHelper.ViewContext.UnobtrusiveJavaScriptEnabled)
{
tagBuilder.MergeAttributes<string, object>(ajaxOptions.ToUnobtrusiveHtmlAttributes());
} //表背单内容
StringBuilder inputTagBuilder = new StringBuilder();
StringBuilder urlBuilder = new StringBuilder(); string str = string.IsNullOrEmpty(formAction) ? HttpContext.Current.Request.Url.AbsolutePath : formAction;
string str2 = HttpContext.Current.Request.Url.Query.Trim(new char[] { '?' });
List<string> strArray = str2.Split(new char[] { '&' }).Where(a => !string.IsNullOrEmpty(a)).ToList(); string[] formKeys = HttpContext.Current.Request.Form.AllKeys;
foreach(var v in formKeys)
{
if (v != "X-Requested-With")
{
strArray.Add(v + "=" + HttpContext.Current.Request.Form[v]);
}
}
if(!strArray.Any(a=>a.StartsWith("page")))
{
strArray.Add("page=1");
} foreach (string str3 in strArray)
{
string[] strArray2 = str3.Split(new char[] { '=' });
inputTagBuilder.AppendFormat("<input type='hidden' value='{1}' name='{0}' />", strArray2[], HttpContext.Current.Server.UrlEncode(strArray2[]));
if ((str3.Length > ) && !str3.StartsWith("page="))
{
if (strArray2.Length == )
{
urlBuilder.AppendFormat("&{0}={1}", strArray2[], HttpContext.Current.Server.UrlEncode(strArray2[]));
}
}
} string pageHtmlString = GetPaginationHtml(rowCount, pageSize, str, urlBuilder.ToString() + option);
string outputHtmlString = tagBuilder.ToString().Replace("</form>", inputTagBuilder + pageHtmlString + "</form>"); return new MvcHtmlString(outputHtmlString);
}
private static AjaxOptions GetAjaxOptions(AjaxOptions ajaxOptions)
{
if (ajaxOptions == null)
{
return new AjaxOptions();
}
return ajaxOptions;
} private static string GetPaginationHtml(int rowCount, int pageSize, string url, string option)
{
int num = (int)Math.Ceiling((double)((rowCount * 1.0) / ((double)pageSize)));
if (num < )
{
return string.Empty;
}
if (url == "")
{
url = HttpContext.Current.Request.Url.AbsolutePath;
}
int result = ;
if (HttpContext.Current.Request["page"] != null)
{
int.TryParse(HttpContext.Current.Request["page"], out result);
}
StringBuilder builder = new StringBuilder();
builder.AppendFormat("<div class=\"pagination-nav\"><div class=\"pull-left\" style='margin-left: 5px;'>共 {1} 页,{0} 条记录</div><ul class=\"pagination pull-right\">", rowCount.ToString(), num.ToString());
int num3 = ;
if (result > )
{
builder.Append(string.Concat(new object[] { " <li><a href=\"", url, "?page=", result - , option, "\"", " data-page=\"" + (result - ) + "\"", ">\x00ab</a></li> " }));
}
if (num > (result + ))
{
num3 = result + ;
}
else
{
num3 = num;
}
for (int i = result - ; i < num3; i++)
{
if (i >= )
{
if (result == (i + ))
{
builder.Append("<li class=\"active\"><a href=\"javascript:\">" + ((i + )).ToString() + "<span class=\"sr-only\">(current)</span></a></li>");
}
else
{
builder.Append(string.Concat(new object[] { "<li><a href=\"", url, "?page=", i + , option, "\"", " data-page=\"" + (i + ) + "\"", ">" + (i + ), "</a></li>" }));
}
}
}
if (result != num)
{
builder.Append(string.Concat(new object[] { "<li><a href=\"", url, "?page=", result + , option, "\"", " data-page=\"" + (result + ) + "\"", ">\x00bb</a></li>" }));
}
builder.Append("</ul></div><div class=\"clearfix\"></div>");
return builder.ToString();
} }
需要引用下面JS
基础:jquery.unobtrusive-ajax.min.js
var ajaxPage = function () {
return {
init: function () {
$("form .pagination-nav a[data-page]").live('click', function () {
$("input[name=page]", $(this).parents('form')).val($(this).attr('data-page'));
$(this).parents('form').submit();
return false;
});
},
//!init
}
}();
//run init
$(function () { ajaxPage.init(); });
使用:
ajax:
@Ajax.Pages(Model.TotalCount, Model.PageSize, @Url.Action("list"), new AjaxOptions { UpdateTargetId = "updateTargetID" }) html:
@Html.Pages(Model.TotalCount, Model.PageSize, @Url.Action("list"), new AjaxOptions { UpdateTargetId = "updateTargetID" })
MVC4 5分页控件,支持Ajax AjaxOption支持的更多相关文章
- 基于jquery扩展漂亮的分页控件(ajax)
分页控件式大家在熟悉不过的控件,很多情况下都需要使用到分页控件来完成列表数据加载操作,在很多分页控件中有的编写麻烦,有的应用扩展比较复杂,有的分页控件样式比较丑陋,有的分页控件用户体验操作比较简单等等 ...
- ajax 分页控件,基于jquery
/* 分页插件,依赖jQuery库 version: 1.1.0 author: Harrison Cao release date: 2013-09-23 相对 v1.0版本 修正了分页居中 使用方 ...
- jQuery Pagination Plugin ajax分页控件
<html> <body> <div id="datagrid"> </div> <div id="paginati ...
- MvcPager 免费开源分页控件3.0版发布!
MvcPager 3.0版在原2.0版的基础上进行了较大的升级,对MvcPager脚本插件重写并进行了大量优化.修复了部分bug并新增了客户端Javascript API等功能,使用更方便,功能更强大 ...
- asp.net 分页-自己写分页控件
去年就发表过asp.net 分页-利用后台直接生成html分页 ,那种方法只是单纯的实现了分页,基本不能使用,那时就想写个自己的分页控件,无奈能力有限.最近有点时间了,就自己做出了这个分页控件.我承认 ...
- 记kkpager分页控件的使用
kkpager支持异步加载分页: 1.页面添加div标签和引用JS,默认标签为<div id="kkpager"></div> 引用JS和样式 <sc ...
- 在DevExpress程序中使用Winform分页控件直接录入数据并保存
一般情况下,我们都倾向于使用一个组织比较好的独立界面来录入或者展示相关的数据,这样处理比较规范,也方便显示比较复杂的数据.不过在一些情况下,我们也可能需要直接在GridView表格上直接录入或者修改数 ...
- 基于存储过程的MVC开源分页控件--LYB.NET.SPPager
摘要 现在基于ASP.NET MVC的分页控件我想大家都不陌生了,百度一下一大箩筐.其中有不少精品,陕北吴旗娃杨涛大哥做的分页控件MVCPager(http://www.webdiyer.com/)算 ...
- 自定义angularjs分页控件
继昨天写了knockoutjs+ jquery pagination+asp.net web Api 实现无刷新列表页 ,正好最近刚学习angularjs ,故琢磨着写一个angularjs版本的分页 ...
随机推荐
- 关于SpringCloud的微服务架构,提示502 Bad Gateway nginx/1.10.0
1.具体环境是使用虚拟机,并在虚拟机上安装nginx对本机上的端口服务进行反向代理 我按照步骤一步步搭建完环境以后,第一次使用是可以正常使用的,当我关闭计算机后,再一次启动环境,就会发现输入网址之后网 ...
- C# 检查数字
#region 检查数字 public bool IsNumeric(string value) { bool result; try { int x = int.Parse(value); resu ...
- IDEA 编译时 报 “常量字符串过长” 解决办法
从eclipse 工具转到 IDEA 工具的时候,出现了一些问题,在这里记录一下,以便之后使用到,废话不多说. 在编译项目时,出现错误为:"常量字符串过长" ,我当时想这个问题需要 ...
- 判断库中为字符串格式的时间是否为最近三个月(Java)
今天分享一个问题,就是标题中提到的问题,今天在调用一个接口的时候,发现调用到的数据的时间格式为字符串类型,我有点蒙圈,于是,我就百度解决了这个问题,同时在这里记录一下,为了之后不再蒙圈::: 首先需要 ...
- zabbix AGENTS 在WINDOWS的安装
1.下载 https://assets.zabbix.com/downloads/3.4.0/zabbix_agents_3.4.0.win.zip 解压 zabbix_agents_3.4.0.wi ...
- vue使用vue-video-player在直播中的应用
文档地址:https://github.com/savokiss/vue-videojs-demo live demo地址:https://github.com/savokiss/vue-videoj ...
- WEBBASE篇: 第十一篇, JavaScript知识6
JavaScript 知识6 一, String 对象 1,分隔字符串, 函数: split(seperator) 作用: 将字符串,通过seperator 拆分成一个数组: eg: var msg= ...
- 用awk检查报表的列数
用awk检查报表的列数 前提当然是报表都有相同数量的列 less yourfile|awk ‘{print NF;exit;}’ NF是awk的内置变量,表示当前记录里域的个数,不难看出,这个命令实际 ...
- 免app下载笔趣阁小说
第一次更新:发现一个问题,就是有时候网页排版有问题的话容易下载到多余章节,如下图所示: 网站抽风多了一个正文一栏,这样的话就会重复下载1603--1703章节. 解决办法: 于是在写入内容前加了一个章 ...
- JPA、Hibernate框架、通用mapper之间的关系及通用mapper的具体实现
JPA是描述对象-关系表的映射关系,将运行期实体对象持久化到数据库中,提出以面向对象方式操作数据库的思想. Hibernate框架核心思想是ORM-实现自动的关系映射.缺点:由于关联操作提出Hql语法 ...