MVC3 Url路由问题

时间:2013-02-16 10:48:11

标签: asp.net-mvc asp.net-mvc-3 asp.net-mvc-routing

我正在尝试注册路线如下:

routes.MapRoute(
            "SaleReport", // Route name
            "SaleReport/GetDataConsolidated/{type}",
            new { controller = "SaleReport", 
                  action = "GetDataConsolidated",
                  type =   UrlParameter.Optional});

并在控制器中

public ActionResult GetDataConsolidated(string type)

    {
      return Content("Report Type = " + type);
    }

我称之为:localhost:56674 / SaleReport / GetDataConsolidated / Sale

但问题是type的值始终为null。 我做错了什么?

2 个答案:

答案 0 :(得分:0)

这可能只是.MapRoute(...)来电的顺序。

在“默认”.MapRoute(...) {controller}/{action}来电之前拨打“SaleReport”.MapRoute(...)来电,因为它更具体。

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

    routes.MapRoute(
        name: "SaleReport",
        url: "SaleReport/GetDataConsolidated/{type}",
        defaults: new { controller = "SaleReport", action = "GetDataConsolidated", type = UrlParameter.Optional });

    routes.MapRoute(
        name: "Default",
        url: "{controller}/{action}/{id}",
        defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
    );
}

答案 1 :(得分:0)

是否有特定需要定义另一个地图路线?

它应该使用默认路由

routes.MapRoute(
        "SaleReport", // Route name
        "SaleReport/GetDataConsolidated/{type}",
        new { controller = "SaleReport", 
              action = "GetDataConsolidated",
              type =   UrlParameter.Optional});

删除以上路线, 只需改变下面的行动方法

public ActionResult GetDataConsolidated(string id)

{
  return Content("Report Type = " + id);
}

这将有效,谢谢。