C# MVC中分页的映射路由
我使用的分页类与NerdDinner示例中使用的非常类似。分页方面工作得很好,但我正在努力让所有的路径正常工作 目前我们有一套C# MVC中分页的映射路由,c#,asp.net-mvc,pagination,C#,Asp.net Mvc,Pagination,我使用的分页类与NerdDinner示例中使用的非常类似。分页方面工作得很好,但我正在努力让所有的路径正常工作 目前我们有一套MapRouteset: routes.MapRoute( "Default", // Route name "{controller}/{action}/{id}/{page}", // URL with parameters new {
MapRoute
set:
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
"{controller}/{action}/{id}/{page}", // URL with parameters
new
{
controller = "Home",
action = "Index",
id = UrlParameter.Optional,
page = UrlParameter.Optional
} // Parameter defaults
);
因此,对于上述路由/home/1/page5,将由home控制器索引操作处理,
但是一些控制器/someAction/1/page5通过第二条路线
您应该知道,首先您需要放置处理较少URL和较常见路由的路由,就像上面针对所有控制器的第二个路由一样
此外,在控制器操作中,您还可以按如下方式查看路由参数:
string page = RouteData.Values["page"];
所以对于上面示例中的url home/1/page5,页面将等于“page5”,您可以解析此字符串以获得页码
至于我,我使用以下方法从路由数据、post body、查询字符串中获取参数:
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));
}
protectedt GetQueryParam(字符串名称,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(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
var page=GetQueryParam(“page”);//如果页面参数不存在,将返回类型的默认值
使用“{controller}/{action}/{id}/page{page}”
将使您的URL看起来像/mycontroller/myaction/1/page5
。关于你的第二个问题,你能详细说明你所说的是什么意思吗?我们如何设置路由,以便操作也可以与分页一起使用?
var page = GetQueryParam<string>("page");// in case if page parameter not exists default value for type will be returned