如何映射具有两个参数值的路由,其中第二个参数是可选的?
How to map route with two parameters value where the second parameter is optional?
我在路由映射方面遇到了问题。我有一个带有两个参数的 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 }
);
}
现在,问题是当我尝试使用这两个参数导航页面时它工作正常。但是,当我尝试没有页面时,它给我错误 "Server not found."
我还阅读了一些 post,他们在其中提出了一些类似的解决方案。但是,id 还是不行。
Multiple optional parameters in MVC is not working
/Blog/Category/programming
匹配第一个路由(默认),在博客控制器上调用类别操作应该没有问题,除了 category
参数将为空,因为第三段默认路由是 id
参数,而不是 category
。执行以下操作之一:
- 将默认路由放在最后
- 将
category
参数重命名为 id
我在路由映射方面遇到了问题。我有一个带有两个参数的 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 }
);
}
现在,问题是当我尝试使用这两个参数导航页面时它工作正常。但是,当我尝试没有页面时,它给我错误 "Server not found."
我还阅读了一些 post,他们在其中提出了一些类似的解决方案。但是,id 还是不行。
Multiple optional parameters in MVC is not working
/Blog/Category/programming
匹配第一个路由(默认),在博客控制器上调用类别操作应该没有问题,除了 category
参数将为空,因为第三段默认路由是 id
参数,而不是 category
。执行以下操作之一:
- 将默认路由放在最后
- 将
category
参数重命名为id