当我尝试使用
生成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 }
);
}
我在这里缺少什么?
答案 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" })