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. centos 6.5 下 nginx 简单优化_虚拟主机_负载均衡

    # 用了nginx for win很久,安装也是超级简单.# 还是用一下linux版的吧.环境是centos 6.5 x64 # 安装开始: # 先安装依赖 yum install gcc-c++ y ...

  2. case 函数的简单使用记录下

    Case有2中格式:简单Case函数和Case搜索函数. 简单函数:case sex when '1' then '男' when '2' then ‘女’ else  '其它' end;(sex是列 ...

  3. Csrf_token ||| CSRF跨站请求伪造

    # 注: 部分内容参考网上,侵删   CSRF(Cross-site request forgery) 跨站请求伪造,是一种对网站的恶意利用  它会通过伪装成受信任用户的请求来利用受信任的网站来获取一 ...

  4. HML

    1.元素分类: 2.浮动: 在非IE浏览器(如Firefox)下,当容器的高度为auto,且容器的内容中有浮动(float为left或right)的元素,在这种情况下,容器的高度不能自动伸长以适应内容 ...

  5. bootstrap框架下 单选按钮组的选中以及取值问题

    1.业务功能:四个按钮只能选中一个,且默认选择水准4 先看代码. <div class="btn-group" data-toggle="buttons" ...

  6. Flutter 开发小技巧

    1.命令行运行flutter run之后iOS报错:Could not install build/ios/iphones/Runner.app on XXXXX. try lunching Xcod ...

  7. 定时清理elasticsearch

    索引这种格式 以下脚本加入crontab #每天清理es数据 0 1 * * * /data/sh/rm_esindex.sh >> /data/logs/crontab/rm_esind ...

  8. gggg

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  9. redis命令Sortedset 类型(八)

    Sortedset又叫zset Sortedset是有序集合,可排序的,但是唯一. Sortedset和set的不同之处, 是会给set中的元素添加一个分数,然后通过这个分数进行排序. 命令 1> ...

  10. 神州数码BGP路由协议配置

    实验要求:了解BGP路由协议的配置方法及原理 拓扑如下 R1 enable 进入特权模式 config 进入全局模式 hostname R1 修改名称 interface l0 进入端口 ip add ...