列表排序 - 如何配置路由

时间:2015-12-15 16:31:12

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

我有一个列出一些数据的视图。我想让它可以排序。问题是我的路线配置

    routes.MapRoute(
            name: "Sort",
            url: "Cars/Index/SortBy/{column}",
            defaults: new { controller = "Cars", action = "Index", column = UrlParameter.Optional }
            );

我总是在我的控制器类中获取null参数。我尝试打开/Cars/SortBy/columnname/Cars/Index/SortBy/columnname它不起作用。只有/Cars/Index?sortBy=columnname有效

    public ActionResult Index(string SortBy)
    {
        switch (SortBy) // SortBy is null
        {
            case "manufactuer":
                return View(db.Cars.OrderBy(c => c.Model.Manufacturer.Name));
                break;

            case "model":
                return View(db.Cars.OrderBy(c => c.Model.Name));
        }

        return View(db.Cars);
    }

如何让它发挥作用?

1 个答案:

答案 0 :(得分:2)

您应该将操作方法​​参数名称更改为column,因为这是您在定义路径时使用的名称。

public ActionResult Index(string column)
{
  return View();
}

然后它适用于网址Cars/Index/SortBy/model

如果您希望它适用于网址Cars/SortBy/model(没有索引),您可以使用此路由定义。

routes.MapRoute(
    name: "Sort",
    url: "Cars/SortBy/{column}",
    defaults: new { controller = "Cars", action = "Index", column = UrlParameter.Optional }
);
// Your other default route definition goes below this

或者如果您使用的是属性路由,

[Route("Cars/SortBy/{column}")]
public ActionResult Index(string column)
{
   return View();
}

确保在RegisterRoutes方法中启用属性路由以使属性路由生效。

public static void RegisterRoutes(RouteCollection routes)
{    
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    routes.MapMvcAttributeRoutes();

    //Custom and default route definitions goes here
}