Html.ActionLink生成错误的URL,始终将URL添加到URL

时间:2014-09-09 13:31:42

标签: asp.net-mvc

当我尝试使用

生成HTML链接时

@Html.ActionLink("Edit Carrier", "EditCarrier", "CustomerCare")

我希望它能生成网址/CustomerCare/EditCarrier/,但无论我将哪个视图放在网址中,总是会生成为/Terminal/CustomerCare/EditCarrier/,我不确定为什么会添加/Terminal/到路线。这是我第一次不使用属性路由,并且在此项目中不能使用它。通过浏览网页,我将RouteConfig.cs文件设置为:

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

        routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );

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

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

我在这里缺少什么?

1 个答案:

答案 0 :(得分:3)

这是因为当您请求网址时,路由Terminals首先匹配。如果您不使用此路线,则可以将其从RouteConfig.cs中删除,然后网址将为/CustomerCare/EditCarrier/。如果您需要任何控制器的Terminals路由,则可以向其添加约束:

routes.MapRoute(
   name: "Terminals",
   url: "Terminal/{controller}/{action}/{id}",
   defaults: new { id = UrlParameter.Optional },
   constraints: new { controller = @"ControllerWhoNeedsThisRoute" }
);

编辑:备用您也可以使用@Html.RouteLink()并添加路由名称以生成网址。但是,您需要在参数中指定控制器和操作。第二个参数是要使用的路由的名称:

@Html.RouteLink("Edit Carrier", "Default", new { controller = "CustomerCare", action = "EditCarrier" })