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 > 0) && !str3.StartsWith("page="))
                {
                    string[] strArray2 = str3.Split(new char[] { ‘=‘ });
                    if (strArray2.Length == 2)
                    {
                        builder.AppendFormat("&{0}={1}", strArray2[0], HttpContext.Current.Server.UrlEncode(strArray2[1]));
                    }
                }
            }

            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[0], HttpContext.Current.Server.UrlEncode(strArray2[1]));
                if ((str3.Length > 0) && !str3.StartsWith("page="))
                {
                    if (strArray2.Length == 2)
                    {
                        urlBuilder.AppendFormat("&{0}={1}", strArray2[0], HttpContext.Current.Server.UrlEncode(strArray2[1]));
                    }
                }
            }

            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 < 2)
            {
                return string.Empty;
            }
            if (url == "")
            {
                url = HttpContext.Current.Request.Url.AbsolutePath;
            }
            int result = 1;
            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 = 0;
            if (result > 1)
            {
                builder.Append(string.Concat(new object[] { " <li><a href=\"", url, "?page=", result - 1, option, "\"", " data-page=\"" + (result - 1) + "\"", ">\x00ab</a></li> " }));
            }
            if (num > (result + 5))
            {
                num3 = result + 5;
            }
            else
            {
                num3 = num;
            }
            for (int i = result - 6; i < num3; i++)
            {
                if (i >= 0)
                {
                    if (result == (i + 1))
                    {
                        builder.Append("<li class=\"active\"><a href=\"javascript:\">" + ((i + 1)).ToString() + "<span class=\"sr-only\">(current)</span></a></li>");
                    }
                    else
                    {
                        builder.Append(string.Concat(new object[] { "<li><a href=\"", url, "?page=", i + 1, option, "\"", " data-page=\"" + (i + 1) + "\"", ">" + (i + 1), "</a></li>" }));
                    }
                }
            }
            if (result != num)
            {
                builder.Append(string.Concat(new object[] { "<li><a href=\"", url, "?page=", result + 1, option, "\"", " data-page=\"" + (result + 1) + "\"", ">\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" })
时间: 2024-10-06 20:20:59

MVC4 5分页控件,支持Ajax AjaxOption支持的相关文章

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

去年就发表过asp.net 分页-利用后台直接生成html分页 ,那种方法只是单纯的实现了分页,基本不能使用,那时就想写个自己的分页控件,无奈能力有限.最近有点时间了,就自己做出了这个分页控件.我承认,这个控件参考了别人的,但是其实里面的原理都相同,差异只是展现方式而已. 去年就在做一个自己的后台系统,刚开始用的asp.net,做了一部分就没有做了,因为缺少权限控制类别.后面转为用asp.net mvc4做,也只是做了一部分,觉得不太方便,也许是我不太会用.再用ajax+ashx做了一部分,虽然

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

MvcPager 3.0版在原2.0版的基础上进行了较大的升级,对MvcPager脚本插件重写并进行了大量优化.修复了部分bug并新增了客户端Javascript API等功能,使用更方便,功能更强大... MvcPager 3.0 更新说明: 修正了路由定义中对页索引参数使用约束而导致无法为页索引文本或下拉框生成跳链接的bug:修正了Ajax分页模式下,如果首次加载时数据只有一页且未设置AutoHide=false,则控件不呈现任何有效html标签,导致MvcPager初始化失败以及后续Aja

asp.net分页控件使用详解【附实例下载】

本篇文章主要对asp.net创建事务的方法进行实例介绍,具有很好的参考价值,需要的朋友一起来看下吧 一.说明 AspNetPager.dll这个分页控件主要用于asp.net webform网站,现将整理代码如下 二.代码 1.首先在测试页面Default.aspx页面添加引用 <%@ Register Assembly="AspNetPager" Namespace="Wuqi.Webdiyer" TagPrefix="webdiyer"

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

一般情况下,我们都倾向于使用一个组织比较好的独立界面来录入或者展示相关的数据,这样处理比较规范,也方便显示比较复杂的数据.不过在一些情况下,我们也可能需要直接在GridView表格上直接录入或者修改数据,这种对于字段比较少,而且内容相对比较简单的情况下,效率是比较高的一种输入方式.本篇随笔主要介绍在DevExpress程序中使用GridView直接录入数据并保存的实现,以及使用Winform分页控件来进行数据直接录入的实现操作. 1.在GridView上展示数据 在GridView上展示数据,只

AspNetPager分页控件的使用方法

1. 首先将AspNetPager.dll复制于应用程序下的bin目录,打开解决方案,引入dll文件 (通过NuGet获取) 2. 在工具栏中添加控件,这样可以支持拖拽使用 3.页面拖入分页控件,设置基本样式(建议跟repeater控件绑定) <%@ Register Assembly="AspNetPager" Namespace="Wuqi.Webdiyer" TagPrefix="webdiyer" %> <webdiye

福利到~分享一个基于jquery的分页控件

前台分页控件有很多,以下是我的实现.默认情况下,点击页码会像博客园一样,在url后面加上"#p页码". 有2个参数需要注意: beforeRender: 在每个页码项呈现前会被调用,参数为页码的jQuery对象.这个时候我们可以在呈现前做一些处理,例如增加自己的属性等.默认情况下,点击页码,会在url后面加上“#p页码”,这样的url并不会刷新页面.如果我们需要刷新页面,例如url为,"default.aspx?index=页码",就可以在这个回调函数里处理. ca

AspNetPager分页控件使用方法

一.下载AspNetPager.dll 二.AspNetPager.dll复制于应用程序下的bin目录,打开解决方案,引用dll文件 三. 在工具栏中添加控件,这样可以支持拖拽使用 四. 要使用AspNetPager 要为其设置最基本的属性 示例: 1.前台显示界面代码Default.aspx <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" I

分页控件之jPaginate

1.网上搜索相关的分页控件,下载它的demo文件 2.打开demo文件,里面会有一个html静态页,打开研究 3.查看源代码,找出控件所依赖的js和css 开始实操: 1.新建一个html或者aspx页面,把控件依赖的js和css拉入项目并在页面中引用 2.创建一个div,对其进行控件的初始化,直接复制demo下的源代码即可 3.现在浏览就应该会出现效果了. ---经过以上,仅仅是把控件展示在项目中,但是还没有和我们的业务进行相关的绑定!!! ----重点来了. 当浏览器/Ajax发出请求分页数

使用amaze ui的分页样式封装一个通用的JS分页控件

作为一名码农,天天百度.偶尔谷歌,所有代码全靠copy,用第三方插件,偶尔也想着造造轮子,毕竟自己的骨肉总归比较亲. 今天有点空闲时间,想起我们公司之前套的页面的分页插件上还有bug,而写那个分页插件的小伙子已经离职,就决定自己来写一个. 首先,肯定是用我们的妹子UI做样式效果,毕竟开发妹子少,做的东西能和妹子沾点边,就沾一点,毕竟妹子比较好看. 然后 开始吧 第一步 找到妹子UI的分页HTML代码,一共有2种,我喜欢第一种,比较有颜 这是妹子UI的分页代码 <ul data-am-widget