我在路线映射方面遇到了麻烦。我有一个ActionResult
有两个参数,其中第一个参数(类别)是强制性的,第二个参数(页面号)是可选的。现在我想映射一个可以用于url的路由。
即
1). http://example.com/Blog/Category/programming
2). http://example.com/Blog/Category/programming/1
其中programming
是类别,/1
是网页编号
这是我的ActionResult
:
public ViewResult Category(string category, int? p = 1)
{
int pageNo = 1;
if (p != null)
pageNo = Convert.ToInt32(p);
//other code
return View("Posts", myViewModel);
}
这是我的映射路线:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Blog", action = "Posts", id = UrlParameter.Optional }
);
//This route does not work
routes.MapRoute(
"MyCategory",
"Blog/Category/{category}/{p}",
new { controller = "Blog", action = "Category", category = "", p = UrlParameter.Optional }
);
}
现在,问题是,当我尝试使用这两个参数导航页面时,它的工作正常。但是,当我尝试没有页面时没有它给我错误“找不到服务器。”
我也读了一些帖子,他们提出了这样的解决方案。但是,仍然id不起作用。
答案 0 :(得分:1)
/Blog/Category/programming
匹配第一个路由(默认),在Blog控制器上调用Category操作应该没有问题,除了category
参数为null,因为默认路由的第三个段是id
参数,而不是category
。执行以下操作之一:
category
参数重命名为id