Exemplo n.º 1
0
        public static MvcHtmlString AsiatekAjaxPager <T>(this AjaxHelper <T> ajaxHelper, AsiatekAjaxPagerOptions2 asiatekAjaxPagerOptions, IAsiatekPagedList pageList)
        {
            if (string.IsNullOrWhiteSpace(asiatekAjaxPagerOptions.SearchPageFieldName))
            {
                asiatekAjaxPagerOptions.SearchPageFieldName = "SearchPage";
            }

            //利用请求上下文对象创建url对象,用于分页超链接的创建
            UrlHelper URL = new UrlHelper(ajaxHelper.ViewContext.RequestContext);


            #region 配置路由参数值
            //反射查询参数对象,将系统类型的属性值添加到路由参数值中,属性名是路由参数的key
            //之所以这样做,是因为对于分页查询所需要的参数肯定都是简单类型
            //比如视图采用模型StudentSetting,StudentSetting包含下拉列表Grades年级,以及对应的值GradeID
            //对于我们的查询而言,需要的只是GradeID,而不是Grades下拉列表属性

            var model = ajaxHelper.ViewData.Model;

            Type type  = model.GetType();
            var  props = type.GetProperties().Where(p => p.PropertyType.ToString().StartsWith("System.") && !p.PropertyType.IsGenericType);
            RouteValueDictionary rvd = new RouteValueDictionary();
            foreach (PropertyInfo p in props)
            {
                rvd.Add(p.Name, p.GetValue(model, null));
            }

            if (!rvd.ContainsKey(asiatekAjaxPagerOptions.SearchPageFieldName))
            {
                //允许自定义分页查询  当前页字段名 比如currentPage
                //相当于往请求参数中附加了currentPage=1
                rvd.Add(asiatekAjaxPagerOptions.SearchPageFieldName, 1);
            }
            else
            {
                rvd[asiatekAjaxPagerOptions.SearchPageFieldName] = 1;
            }
            //查询操作所属区域名
            rvd.Add("area", asiatekAjaxPagerOptions.AreaName);
            #endregion



            int pageIndex = pageList.CurrentPageIndex; //当前页索引
            int pageCount = pageList.TotalPageCount;   //总页数

            string voidStr = "javascript:void(0)";

            TagBuilder asiatekPagerDiv = new TagBuilder("div");//最外层DIV
            asiatekPagerDiv.GenerateId("asiatekPager");


            TagBuilder asiatekPagerBackDiv = new TagBuilder("div");//第一页
            asiatekPagerBackDiv.GenerateId("asiatekPagerBack");
            TagBuilder backLink = new TagBuilder("a");
            backLink.MergeAttribute("href", voidStr);
            backLink.SetInnerText("||<");
            backLink.AddCssClass("asiatekPagerDefault");
            if (pageCount != 1)//只有当总页数不为1时,才需要为返回第一页的html标签设置地址
            {
                asiatekAjaxPagerOptions.Url = URL.Action(asiatekAjaxPagerOptions.ActionName, asiatekAjaxPagerOptions.ControllerName, rvd);
                backLink.MergeAttributes(asiatekAjaxPagerOptions.ToUnobtrusiveHtmlAttributes());
            }
            asiatekPagerBackDiv.InnerHtml = backLink.ToString();


            TagBuilder asiatekPagerFrontDiv = new TagBuilder("div");//末页
            asiatekPagerFrontDiv.GenerateId("asiatekPagerFront");
            TagBuilder frontLink = new TagBuilder("a");
            frontLink.MergeAttribute("href", voidStr);
            frontLink.SetInnerText(">||");
            frontLink.AddCssClass("asiatekPagerDefault");
            if (pageCount != 1)//只有当总页数不为1时,才需要为末页的html标签设置地址
            {
                rvd[asiatekAjaxPagerOptions.SearchPageFieldName] = pageCount;
                asiatekAjaxPagerOptions.Url = URL.Action(asiatekAjaxPagerOptions.ActionName, asiatekAjaxPagerOptions.ControllerName, rvd);
                frontLink.MergeAttributes(asiatekAjaxPagerOptions.ToUnobtrusiveHtmlAttributes());
            }
            asiatekPagerFrontDiv.InnerHtml = frontLink.ToString();


            //内容(页选择)
            TagBuilder asiatekPagerContentDiv = new TagBuilder("div");//页内容
            asiatekPagerContentDiv.GenerateId("asiatekPagerContent");


            for (int i = 1; i <= pageCount; i++)
            {
                TagBuilder numLink = new TagBuilder("a");
                numLink.AddCssClass("asiatekPagerDefault");
                numLink.MergeAttribute("href", voidStr);
                if (i == pageIndex)//当前页添加 css
                {
                    numLink.AddCssClass("asiatekPagerSelected");
                }
                if (pageCount != 1)//如果总页数超过1,那么才对 页链接创建非注入式脚本,否则不添加
                {
                    rvd[asiatekAjaxPagerOptions.SearchPageFieldName] = i;
                    asiatekAjaxPagerOptions.Url = URL.Action(asiatekAjaxPagerOptions.ActionName, asiatekAjaxPagerOptions.ControllerName, rvd);
                    numLink.MergeAttributes(asiatekAjaxPagerOptions.ToUnobtrusiveHtmlAttributes());
                }
                numLink.SetInnerText(i.ToString());
                asiatekPagerContentDiv.InnerHtml += numLink.ToString();
            }
            int contentWidth = 250; //页数内容容器默认宽度250px
            int pagerWidth   = 320; //整个分页导航总宽度默认320px
            if (pageCount < 10)     //最多同时显示10页,当少于10页时,动态计算整体宽度,每个页链接占用25px,第一页与末页链接各占用35px
            {
                contentWidth = pageCount * 25;
                pagerWidth   = 70 + contentWidth;
            }
            //设置容器宽度
            asiatekPagerContentDiv.MergeAttribute("style", "width:" + contentWidth + "px;");
            asiatekPagerDiv.MergeAttribute("style", "width:" + pagerWidth + "px;");

            //合并全部HTML
            asiatekPagerDiv.InnerHtml = asiatekPagerBackDiv.ToString() + asiatekPagerContentDiv.ToString() + asiatekPagerFrontDiv.ToString();
            return(MvcHtmlString.Create(asiatekPagerDiv.ToString()));
        }
Exemplo n.º 2
0
        /// <summary>
        /// <para>生成Ajax分页导航</para>
        /// </summary>
        /// <typeparam name="T">包含分页数据与分页查询条件的类型</typeparam>
        /// <param name="ajaxHelper"></param>
        /// <param name="pageList">分页结果</param>
        /// <param name="apo">Ajax分页选项</param>
        /// <param name="apso">Ajax分页样式选项</param>
        /// <returns></returns>
        public static MvcHtmlString AsiatekAjaxPagerBootstrap <T>(this AjaxHelper <T> ajaxHelper, IAsiatekPagedList pageList, AjaxPagerOptions apo, AjaxPagerStyleOptions apso = null)
        {
            #region 配置路由参数值
            //反射查询参数对象,将系统类型的属性值添加到路由参数值中,属性名是路由参数的key
            //之所以这样做,是因为对于分页查询所需要的参数肯定都是简单类型
            //比如视图采用模型StudentSetting,StudentSetting包含下拉列表Grades年级,以及对应的值GradeID
            //对于我们的查询而言,需要的只是GradeID,而不是Grades下拉列表属性
            var model = ajaxHelper.ViewData.Model;

            Type type = model.GetType();
            //必须使用Nullable.GetUnderlyingType获取可空类型的基础类型,否者如int?类型的IsGenericType是true,因为本质是Nullable<T>类型
            var props = type.GetProperties().Where(p =>
            {
                Type safeType = Nullable.GetUnderlyingType(p.PropertyType) ?? p.PropertyType;
                return(safeType.ToString().StartsWith("System.") && !safeType.IsGenericType);
            });
            RouteValueDictionary rvd = new RouteValueDictionary();
            foreach (PropertyInfo p in props)
            {
                rvd.Add(p.Name, p.GetValue(model, null));
            }
            if (string.IsNullOrEmpty(apo.SearchPageFieldName))
            {
                apo.SearchPageFieldName = "SearchPage";
            }

            if (!rvd.ContainsKey(apo.SearchPageFieldName))
            {
                //允许自定义分页查询  当前页字段名
                //相当于往请求参数中附加了SearchPage=1
                rvd.Add(apo.SearchPageFieldName, 1);
            }
            else
            {
                rvd[apo.SearchPageFieldName] = 1;
            }
            //查询操作所属区域名
            rvd.Add("area", apo.AreaName);
            #endregion


            return(CreateBootstrapPagerNav(pageList.CurrentPageIndex, pageList.TotalPageCount, apso, apo, ajaxHelper, rvd, null));
        }
Exemplo n.º 3
0
        public static MvcHtmlString AsiatekAjaxPager(this AjaxHelper ajaxHelper, IAsiatekPagedList pageList, Func <int, AjaxOptions> pageAjaxOptions)
        {
            int pageIndex = pageList.CurrentPageIndex; //当前页索引
            int pageCount = pageList.TotalPageCount;   //总页数

            string voidStr = "javascript:void(0)";

            TagBuilder asiatekPagerDiv = new TagBuilder("div");//最外层DIV

            asiatekPagerDiv.GenerateId("asiatekPager");


            TagBuilder asiatekPagerBackDiv = new TagBuilder("div");//第一页

            asiatekPagerBackDiv.GenerateId("asiatekPagerBack");
            TagBuilder backLink = new TagBuilder("a");

            backLink.MergeAttribute("href", voidStr);
            backLink.SetInnerText("||<");
            backLink.AddCssClass("asiatekPagerDefault");
            if (pageCount != 1)
            {
                backLink.MergeAttributes(pageAjaxOptions(1).ToUnobtrusiveHtmlAttributes());
            }
            asiatekPagerBackDiv.InnerHtml = backLink.ToString();


            TagBuilder asiatekPagerFrontDiv = new TagBuilder("div");//末页

            asiatekPagerFrontDiv.GenerateId("asiatekPagerFront");
            TagBuilder frontLink = new TagBuilder("a");

            frontLink.MergeAttribute("href", voidStr);
            frontLink.SetInnerText(">||");
            frontLink.AddCssClass("asiatekPagerDefault");
            if (pageCount != 1)
            {
                frontLink.MergeAttributes(pageAjaxOptions(pageCount).ToUnobtrusiveHtmlAttributes());
            }
            asiatekPagerFrontDiv.InnerHtml = frontLink.ToString();


            //内容(页选择)
            TagBuilder asiatekPagerContentDiv = new TagBuilder("div");//页内容

            asiatekPagerContentDiv.GenerateId("asiatekPagerContent");


            for (int i = 1; i <= pageCount; i++)
            {
                TagBuilder numLink = new TagBuilder("a");
                numLink.AddCssClass("asiatekPagerDefault");
                numLink.MergeAttribute("href", voidStr);
                if (i == pageIndex)//当前页添加 css
                {
                    numLink.AddCssClass("asiatekPagerSelected");
                }
                if (pageCount != 1)//如果总页数超过1,那么才对 页链接创建非注入式脚本,否则不添加
                {
                    numLink.MergeAttributes(pageAjaxOptions(i).ToUnobtrusiveHtmlAttributes());
                }
                numLink.SetInnerText(i.ToString());
                asiatekPagerContentDiv.InnerHtml += numLink.ToString();
            }
            int contentWidth = 250; //页数内容容器默认宽度250px
            int pagerWidth   = 320; //整个分页导航总宽度默认320px

            if (pageCount < 10)     //最多同时显示10页,当少于10页时,动态计算整体宽度,每个页链接占用25px,第一页与末页链接各占用35px
            {
                contentWidth = pageCount * 25;
                pagerWidth   = 70 + contentWidth;
            }
            //设置容器宽度
            asiatekPagerContentDiv.MergeAttribute("style", "width:" + contentWidth + "px;");
            asiatekPagerDiv.MergeAttribute("style", "width:" + pagerWidth + "px;");

            //合并全部HTML
            asiatekPagerDiv.InnerHtml = asiatekPagerBackDiv.ToString() + asiatekPagerContentDiv.ToString() + asiatekPagerFrontDiv.ToString();
            return(MvcHtmlString.Create(asiatekPagerDiv.ToString()));
        }