ajax.mikepager,MikePager中Url参数保留 MVC 查询 分页

这两天一直在搞MVC 2.0的查询后分页,分页控件用的MikePager。

刚开始用的MikePagerAjaxExtensions.cs,代码如下:

69c5a8ac3fa60e0848d784a6dd461da6.png

1 usingSystem;2 usingSystem.Text;3 usingSystem.Web.Routing;4

5 namespaceSystem.Web.Mvc6 {7 public static classMikePagerAjaxExtensions8 {9 #region MikePager 分页控件

10

11 public static string MikePager(this AjaxHelper html, PagedListdata)12 {13

14 int start = (data.PageIndex - 5) >= 1 ? (data.PageIndex - 5) : 1;15 int end = (data.TotalPage - start) > 10 ? start + 10: data.TotalPage;16

17 RouteValueDictionary vs =html.ViewContext.RouteData.Values;18 var queryString =html.ViewContext.HttpContext.Request.QueryString;19 foreach (string key inqueryString.Keys)20 vs[key] =queryString[key];21

22 var FormString =html.ViewContext.HttpContext.Request.Form;23 foreach (string key inFormString.Keys)24 vs[key] =FormString[key];25

26 string Formstring = FormString.ToString().Replace("&", ",");27

28 //var url = html.ViewContext.HttpContext.Request.Url;

29 var url1 =html.ViewContext.HttpContext.Request.RawUrl;30 var builder = newStringBuilder();31 builder.AppendFormat("");32

33 //vs["pageSize"] = data.PageSize;

34 if(data.IsPreviousPage)35 {36 vs["pageIndex"] = 1;37

38 builder.Append(Ajax.AjaxExtensions.ActionLink(html, "首页", vs["action"].ToString(), vs, new Ajax.AjaxOptions() { LoadingElementId = "Loading", UpdateTargetId = "Main" }, new { onclick = "$(function(){$.jBox.tip('正在处理...', 'loading');});"}));39

40 vs["pageIndex"] = data.PageIndex - 1;41

42 builder.Append(Ajax.AjaxExtensions.ActionLink(html, "上一页", vs["action"].ToString(), vs, new Ajax.AjaxOptions() { LoadingElementId = "Loading", UpdateTargetId = "Main" }, new { onclick = "$(function(){$.jBox.tip('正在处理...', 'loading');});"}));43

44 }45

46 for (int i = start; i <= end; i++) //前后各显示5个数字页码

47 {48 vs["pageIndex"] =i;49

50 if (i ==data.PageIndex)51 {52 builder.Append("" + i.ToString() + "");53 }54 else

55 {56 builder.Append(Ajax.AjaxExtensions.ActionLink(html, i.ToString(), vs["action"].ToString(), vs, new Ajax.AjaxOptions() { LoadingElementId = "Loading", UpdateTargetId = "Main" }, new { onclick = "$(function(){$.jBox.tip('正在处理...', 'loading');});"}));57 }58 }59

60 if(data.IsNextPage)61 {62 vs["pageIndex"] = data.PageIndex + 1;63

64 builder.Append(Ajax.AjaxExtensions.ActionLink(html, "下一页", vs["action"].ToString(), vs, new Ajax.AjaxOptions() { LoadingElementId = "Loading", UpdateTargetId = "Main" }, new { onclick = "$(function(){$.jBox.tip('正在处理...', 'loading');});"}));65

66 vs["pageIndex"] =data.TotalPage;67

68 builder.Append(Ajax.AjaxExtensions.ActionLink(html, "末页", vs["action"].ToString(), vs, new Ajax.AjaxOptions() { LoadingElementId = "Loading", UpdateTargetId = "Main" }, new { onclick = "$(function(){$.jBox.tip('正在处理...', 'loading');});"}));69

70 }71 builder.Append("每页" + data.PageSize + "条/共" + data.TotalCount + "条 第" + data.PageIndex + "页/共" + data.TotalPage + "页");72 returnbuilder.ToString();73 }74 #endregion

75

76 }77 }

69c5a8ac3fa60e0848d784a6dd461da6.png

前台搜索的form为:

69c5a8ac3fa60e0848d784a6dd461da6.png

1 using(Ajax.BeginForm(newAjaxOptions{})){%>

2

3

4 =Html.TextBox("keyword")%>

5 =Html.DropDownList("input1",newList{newSelectListItem{Text=""},newSelectListItem{Text="男"},newSelectListItem{Text="女"}})%>

6 =Html.DropDownList("pageSize",newList{newSelectListItem { Text= ""},newSelectListItem { Text= "5",Value="5"},newSelectListItem { Text= "10",Value="10"},newSelectListItem { Text= "15",Value="15"},newSelectListItem { Text= "20",Value="20"} })%>

7

8

9 div>

10 }%>

69c5a8ac3fa60e0848d784a6dd461da6.png

点击后搜索成功,也可以分页,但是点击分页控件时,不能保留Url参数,譬如:选择性别***=“0”(男),页数pageSize=5,

点击分页控件查看下一页,本来的URL应该是

/Sys_Controllers/Index/System.Web.Mvc.UrlParameter/2?pageSize=5&***=0

但是实际点击后的Url为:/Sys_Controllers

/Index/System.Web.Mvc.UrlParameter/2?Count=3&Keys=System.Collections.Generic.Dictionary%602%2BKeyCollection%5BSystem.String%2CSystem.Object%5D&Values=System.Collections.Generic.Dictionary%602%2BValueCollection%5BSystem.String%2CSystem.Object%5D

如果想保留Url参数,则需要修改MikePagerAjaxExtensions.cs中的

1 Ajax.AjaxExtensions.ActionLink(html, i.ToString(), vs["action"].ToString(), vs, new Ajax.AjaxOptions() { LoadingElementId = "Loading", UpdateTargetId = "Main" }, new { onclick = "$(function(){$.jBox.tip('正在处理...', 'loading');});" })

为:

Ajax.AjaxExtensions.ActionLink(html, i.ToString(), vs["action"].ToString(), new{pageSize=vs["pageSize"],***=vs["***"]}, new Ajax.AjaxOptions() { LoadingElementId = "Loading", UpdateTargetId = "Main" }, new { onclick = "$(function(){$.jBox.tip('正在处理...', 'loading');});" })

暂时没有其他的解决方法。但是这种方法用在系统中很不方便,然后使用MikePagerHtmlExtensions.cs后可以完美的保留Url中的参数,代码为:

69c5a8ac3fa60e0848d784a6dd461da6.png

1 usingSystem.Text;2 usingSystem.Web.Routing;3

4 namespaceSystem.Web.Mvc5 {6 public static classMikePagerHtmlExtensions7 {8

9 #region MikePager 分页控件

10

11 public static string MikePager(this HtmlHelper html, PagedListdata)12 {13 int start = (data.PageIndex - 5) >= 1 ? (data.PageIndex - 5) : 1;14 int end = (data.TotalPage - start) > 10 ? start + 10: data.TotalPage;15

16 RouteValueDictionary vs =html.ViewContext.RouteData.Values;17

18 var queryString =html.ViewContext.HttpContext.Request.QueryString;19 foreach (string key inqueryString.Keys)20 //if (queryString[key] != null && !string.IsNullOrEmpty(key))

21 vs[key] =queryString[key];22

23 var FormString =html.ViewContext.HttpContext.Request.Form;24 foreach (string key inFormString.Keys)25 vs[key] =FormString[key];26

27 var builder = newStringBuilder();28 builder.AppendFormat("");29

30 if(data.IsPreviousPage)31 {32 vs["pageIndex"] = 1;33 builder.Append(Html.LinkExtensions.ActionLink(html, "首页", vs["action"].ToString(), vs));34 vs["pageIndex"] = data.PageIndex - 1;35 builder.Append(Html.LinkExtensions.ActionLink(html, "上一页", vs["action"].ToString(), vs));36 }37

38 for (int i = start; i <= end; i++) //前后各显示5个数字页码

39 {40 vs["pageIndex"] =i;41 if (i ==data.PageIndex)42 {43 builder.Append("" + i.ToString() + "");44 }45 else

46 {47 builder.Append(Html.LinkExtensions.ActionLink(html, i.ToString(), vs["action"].ToString(), vs));48 }49 }50

51 if(data.IsNextPage)52 {53 vs["pageIndex"] = data.PageIndex + 1;54 builder.Append(Html.LinkExtensions.ActionLink(html, "下一页", vs["action"].ToString(), vs));55 vs["pageIndex"] =data.TotalPage;56 builder.Append(Html.LinkExtensions.ActionLink(html, "末页", vs["action"].ToString(), vs));57 }58 builder.Append("每页" + data.PageSize + "条/共" + data.TotalCount + "条 第" + data.PageIndex + "页/共" + data.TotalPage + "页");59 returnbuilder.ToString();60 }61 #endregion

62

63 }64 }

69c5a8ac3fa60e0848d784a6dd461da6.png

对了,我的Global.asax.cs代码是:

69c5a8ac3fa60e0848d784a6dd461da6.png

1 routes.IgnoreRoute("{resource}.axd/{*pathInfo}");2

3 routes.MapRoute(4 "Root",5 "",6 new { controller = "Index", action = "Index"},7 new string[] { "Web.Controllers"}8 );9

10 routes.MapRoute(11 "Default", //Route name

12 "{controller}.aspx/{action}/{id}/{pageIndex}", //URL with parameters

13 new { controller = "Index", action = "Index", id = UrlParameter.Optional, pageIndex = UrlParameter.Optional }, //Parameter defaults

14 new string[] { "Web.Controllers"}15 );

69c5a8ac3fa60e0848d784a6dd461da6.png

上面都是这两天搞的东西,对于ajax的MikePager我只能用到那种方法,如果那位看到这篇文章的大哥大姐有更好的方法,请贴出来共享一下,目前我用了html方式的MikePager可以保留Url参数@;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值