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版本的分页 ...
随机推荐
- Js修改input值后怎么同步修改绑定的v-model值
v-model只是一种语法糖,底层的方法还是去监听input事件.所以可以使用dispatchEvent事件给元素分配一个input事件,这样可以手动触发 inputElement 的 input 事 ...
- 第三次scrum冲刺
第三次冲刺 一.第三次冲刺任务 ! 在已有的基础上实现图书馆管理员对图书信息的查询以及对图书借阅情况的查询. 二.用户故事 本次的用户是图书馆的管理员 用户输入对应的管理员的账号和密码 用户选择图书 ...
- 基于testng框架的web自动化测试
package baidutest; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.o ...
- Vasya and Binary String(来自codeforces
题目大意: 给定一个0/1字符串,每次你可以将此字符串中一段连续的任意长度的0/1子串消除掉,注意每次消除的子串中只能有0或者1一种字符,消除掉一串长度为i的0/1字符串会得到a[i]的收益,问将这个 ...
- CentOS 6.8 配置防火墙,开放8080端口
打开配置文件 sudo vim /etc/sysconfig/iptables 按下a,进入编辑 加入这一行 -A INPUT -m state --state NEW -m tcp -p tcp - ...
- vue-resource+element upload上传(遇到formData总是变为object格式)
文件上传这种业务需求很常见,但是最近用了element,仔细看了文档,按照demo写了上传,与后台传参调取接口时,控制台总是显示未获取到文件,想了又想,发现一开始思路就跑遍了... 写此博记录下遇到的 ...
- SpringBoot的学习【7.引入配置文件】
1.@PropertySource 作用:加载指定的配置文件 2.@ImportResource ---恢复内容结束---
- phoneshop cs6破解
一.以“试用”方式安装photoshop: 二.下载amtlib.dll破解文件,密码:ubx2: 三.备份photoshop目录下的amtlib.dll文件,将下载的amtlib.dll文件拷贝到p ...
- 2018-2019-2 网络对抗技术 20165228 Exp6 信息搜集与漏洞扫描
2018-2019-2 网络对抗技术 20165228 Exp6 信息搜集与漏洞扫描 回答问题 哪些组织负责DNS,IP的管理. 全球根服务器均由美国政府授权的ICANN统一管理,负责全球的域名根服务 ...
- Java中switch对整型/字符型/字符串型具体实现细节
转自:http://www.hollischuang.com/archives/61 Java7中switch中支持的数据类型有: byte short int char String类型 其实swi ...