C# 更改正在运行的参数的名称

C# 更改正在运行的参数的名称,c#,asp.net-mvc-4,asp.net-mvc-routing,C#,Asp.net Mvc 4,Asp.net Mvc Routing,我有一个关于路线图的项目(仅此而已): 我在控制器中有一个方法: public ViewResult List(int id = 1) { ... } 在List.cshtml中: @Html.ActionLink(i.ToString(), "List", "Product", new { id = i }, null) 但我想将id更改为page,但不想在RouteConfig.cs中更改它,我认为这是可以配置我的操作路线的一些属性。我想要这个解决方案: @Html.ActionLi

我有一个关于路线图的项目(仅此而已):

我在控制器中有一个方法:

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)


可以使用属性路由覆盖约定

首先确保已启用属性路由:

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)
{
    ...
}
有关属性路由的更多信息,请参见此处:

[Route("YourControllerName/List/{page?}")]
public ViewResult List(int page = 1)
{
    ...
}
[Route("")]
[Route("YourControllerName/List/{page?}")]
public ViewResult List(int page = 1)
{
    ...
}