我有Map Route的项目(全部):
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Product", action = "List", id = UrlParameter.Optional }
);
我在控制器中有方法:
public ViewResult List(int id = 1)
{
...
}
和 List.cshtml :
@Html.ActionLink(i.ToString(), "List", "Product", new { id = i }, null)
但是我想将id更改为page,但不是在RouteConfig.cs
中更改它,我认为这是一些可以配置我的行动路线的属性。我想要这个解决方案:
@Html.ActionLink(i.ToString(), "List", "Product", new { page = i }, null)
和
[maybe here I can add my specify route?]
public ViewResult List(int page = 1)
{
...
}
答案 0 :(得分:2)
您可以使用属性路由来覆盖约定。
首先确保启用了属性路由:
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.MapMvcAttributeRoutes();
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Product", action = "List", id = UrlParameter.Optional }
);
}
}
然后为控制器方法添加适当的属性,例如:
[Route("YourControllerName/List/{page?}")]
public ViewResult List(int page = 1)
{
...
}
问号使页面参数可选。
如果它是默认控制器和操作
[Route("")]
[Route("YourControllerName/List/{page?}")]
public ViewResult List(int page = 1)
{
...
}
有关属性路由的更多信息,请访问: http://blogs.msdn.com/b/webdev/archive/2013/10/17/attribute-routing-in-asp-net-mvc-5.aspx