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支持的更多相关文章

  1. 基于jquery扩展漂亮的分页控件(ajax)

    分页控件式大家在熟悉不过的控件,很多情况下都需要使用到分页控件来完成列表数据加载操作,在很多分页控件中有的编写麻烦,有的应用扩展比较复杂,有的分页控件样式比较丑陋,有的分页控件用户体验操作比较简单等等 ...

  2. ajax 分页控件,基于jquery

    /* 分页插件,依赖jQuery库 version: 1.1.0 author: Harrison Cao release date: 2013-09-23 相对 v1.0版本 修正了分页居中 使用方 ...

  3. jQuery Pagination Plugin ajax分页控件

    <html> <body> <div id="datagrid"> </div> <div id="paginati ...

  4. MvcPager 免费开源分页控件3.0版发布!

    MvcPager 3.0版在原2.0版的基础上进行了较大的升级,对MvcPager脚本插件重写并进行了大量优化.修复了部分bug并新增了客户端Javascript API等功能,使用更方便,功能更强大 ...

  5. asp.net 分页-自己写分页控件

    去年就发表过asp.net 分页-利用后台直接生成html分页 ,那种方法只是单纯的实现了分页,基本不能使用,那时就想写个自己的分页控件,无奈能力有限.最近有点时间了,就自己做出了这个分页控件.我承认 ...

  6. 记kkpager分页控件的使用

    kkpager支持异步加载分页: 1.页面添加div标签和引用JS,默认标签为<div id="kkpager"></div> 引用JS和样式 <sc ...

  7. 在DevExpress程序中使用Winform分页控件直接录入数据并保存

    一般情况下,我们都倾向于使用一个组织比较好的独立界面来录入或者展示相关的数据,这样处理比较规范,也方便显示比较复杂的数据.不过在一些情况下,我们也可能需要直接在GridView表格上直接录入或者修改数 ...

  8. 基于存储过程的MVC开源分页控件--LYB.NET.SPPager

    摘要 现在基于ASP.NET MVC的分页控件我想大家都不陌生了,百度一下一大箩筐.其中有不少精品,陕北吴旗娃杨涛大哥做的分页控件MVCPager(http://www.webdiyer.com/)算 ...

  9. 自定义angularjs分页控件

    继昨天写了knockoutjs+ jquery pagination+asp.net web Api 实现无刷新列表页 ,正好最近刚学习angularjs ,故琢磨着写一个angularjs版本的分页 ...

随机推荐

  1. 18-09-15 潘一刘老师 讲课replace 控件输入函数检测的包

    控件输入 指的是 一般金融机构 输入密码时候需要文本 键盘不能输入时候 用到的

  2. ViewBag赋值Html格式值

    今天再给自己总结一下,关于ViewBag赋值Html格式值,但是在web页显示不正常; 例如,ViewBag.Content = "<p>你好,我现在测试一个东西.</p& ...

  3. org.hibernate.AssertionFailure: null id in xxx entry (don't flush the Session after an exception occurs)

    网上找了很久,发现造成原因有很多种,后来终于发现了端倪:看提示是发生了异常,查看业务代码,发现有这个逻辑:先插入记录,如果有唯一键约束异常(并发造成),catch时查询已存在的记录,查询的时候就报了此 ...

  4. WCF分布式3-InstanceContext和ConcurrencyMode

    WCF中,如果将实现契约(接口)的服务配置默认为 InstanceContextMode = InstanceContextMode.Single, 也就是说这个服务对象,客户端调用这个对象的接口时, ...

  5. python爬虫初级--获取指定页面上的菜单名称以及链接,然后导出

    ''' Created on 2017年4月5日 @author: Admin ''' import requests from bs4 import BeautifulSoup as bsp # 网 ...

  6. 1.django项目的创建(在CMD中)

    django项目的创建(在CMD中) 1.切换到你想要存储项目的位置,我这里保存在桌面上 cd Desktop 2.创建一个django项目,项目名叫guest django-admin startp ...

  7. 卷积神经网络特征图可视化(自定义网络和VGG网络)

    借助Keras和Opencv实现的神经网络中间层特征图的可视化功能,方便我们研究CNN这个黑盒子里到发生了什么. 自定义网络特征可视化 代码: # coding: utf-8 from keras.m ...

  8. Python 安装第三方库中常见问题总结

    1.安装某个库时,例如 pip install tinify 出现Permission denied时,在安装命令的最前面添加sudo 例如: sudo pip install tinify 即可. ...

  9. 浏览器h5新建文件 保存到本地(相当于浏览器写文件)

    function doSave(value, type, name) {         var blob;         if (typeof window.Blob == "funct ...

  10. java语言入门

    Java语言的介绍: Java是一种可以撰写跨平台应用程序的面向对象的程序设计语言. 它最初被命名为Oak,目标设定在家用电器等小型系统的编程语言,来解决诸如电视机.电话.闹钟.烤面包机等家用电器的控 ...