更改操作中的参数名称

时间:2014-10-04 21:16:59

标签: c# asp.net-mvc-4 asp.net-mvc-routing

我有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)
{
  ...
}

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