我使用的分页类非常类似于NerdDinner示例中使用的类.分页方面工作正常,但我正在努力让所有路由正常工作.
目前我们有一个MapRoute集:
routes.MapRoute( "Default",// Route name "{controller}/{action}/{id}/{page}",// URL with parameters new { controller = "Home",action = "Index",id = UrlParameter.Optional,page = UrlParameter.Optional } // Parameter defaults );
我们希望URL而不是/ mycontroller / myaction / 1/5是/ mycontroller / myaction / 1 / page5,这样对用户来说更有意义.我现在找不到办法做到这一点.
其次,我们如何设置路线,以便动作也可以与分页一起使用.即/ controller / page1而不是/ controller / index / page1
解决方法
你应该有两条路线:
routes.MapRoute( "Default",// Route name "home/{id}/{page}",// URL with parameters new { controller = "Home",page = UrlParameter.Optional } // Parameter defaults );
所有控制器的最后路线:
routes.MapRoute( "Default",// Route name "{controller}/{action}/{id}/{page}",page = UrlParameter.Optional } // Parameter defaults );
所以上面的路由/ home / 1 / page5将由home controller index action处理,
但是someController / someAction / 1 / page5是第二条路线.
您应该知道,首先您需要放置处理较少网址和 – 常用路由的路由,例如上面的所有控制器的第二条路由.
在控制器操作内部,您可以像这样retreview route参数:
string page = RouteData.Values["page"];
所以对于上面的示例页面中的url home / 1 / page5将等于’page5′,而不是可以解析此字符串以获取页码.
至于我,我使用以下方法从路径数据,帖子正文,查询字符串中获取参数:
protected T GetQueryParam<T>(String name,T defValue = default(T)) { String param = HttpContext.Request.QueryString.Get(name); if (String.IsNullOrEmpty(param)) param = HttpContext.Request.Params[name]; if ( String.IsNullOrEmpty(param)) param = (String) RouteData.Values[name] ?? String.Empty; if (String.IsNullOrEmpty(param) ) return defValue; return (T)Convert.ChangeType(param,typeof(T)); }
因此,如果您需要使用上述方法获取页面,您只需要执行以下操作:
var page = GetQueryParam<string>("page");// in case if page parameter not exists default value for type will be returned
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。