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())); }
/// <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)); }
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())); }