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版本的分页 ...
随机推荐
- Python第六章(北理国家精品课 嵩天等)
一 1.集合类型定义及其操作: 集合用{}表示,元素用逗号分隔,无序,唯一 集合操作符: |:并 -:减 &:交 ^ :补 <= <:判断子集关系 >= >:判断包含关 ...
- 基于ZYNQ的双核启动与通信问题解决
1 处理器间的通信 为AMP 设计创建应用之前,您需要考虑应用如何进行通信(如有需要).最简单的方法是使用片上存储器.Zynq SoC 配备256KB 的片上SRAM,可从以下四个源地址进行访问 ...
- Application对象及常用方法
Application对象: 服务器启动后,就产生了这个application对象.当一个客户访问服务器上的一个JSP页面时,JSP引擎为该客户分配这个 application对象,当客户在所访问的网 ...
- input.nextLine()的注意事项
若在input.nextInt()和input.nextDouble()后使用input.nextLine(),要先加一个input.nextLine()进行换行
- shell 之扫描ip段
#!/bin/sh domain=`echo $1|awk -F"." '{print $1"."$2"."$3"."} ...
- 微信自定义菜单errcode(40016)
最近在做微信开发,通过微信API创建自定义菜单时候出现:{"errcode":40016,"errmsg":"invalid button size ...
- imeiimsi生成规则
添加SMI 和 IMSI修改 添加模拟器名修改(MEmu_ 修改成其他的名字,不支持批量修改) IMSI第十位:7代表是145卡,6代表186卡,3代表156,0代表130,其他的可以自己找 预 ...
- C#创建、读写、增加、删除XML操作
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threa ...
- Visual C++ 6.0中互换两个数字
就好比如两杯水,需要三个杯子将这两杯水互换.互换数字就要用一个中间变量. # include <stdio.h> int main(void) { int i; int j; int k; ...
- 微信小程序上传后发布或者体验版测试无数据解决办法
在做微信小程序开发的过程中,发现小程序在本地调用接口的数据都显示,但是上传之后,发现手机体验没有数据.以下为解决办法: 1.先清除缓存试试. 2.打开微信小程序工具右上角的详情——项目设置,将“不校验 ...