2014-09-09 3 views
0

При попытке сгенерировать ссылку HTML, используяHtml.ActionLink генерирует неправильный URL, aslways добавление терминала/к URL

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

Я бы ожидать, что она не генерирует URL /CustomerCare/EditCarrier/, но независимо от того, что вид Я размещаю его в URL-адресе, который всегда генерируется как /Terminal/CustomerCare/EditCarrier/, и я не уверен, почему /Terminal/ добавляется к маршруту. Это мой первый раз, когда я не использовал маршрутизацию атрибутов, и это не вариант использования этого проекта. Глядя вокруг на установку веб-I мой файл 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 } 
     ); 
    } 

Что я здесь отсутствует?

ответ

3

Это потому, что маршрут Terminals соответствует первым, когда вы запрашиваете URL-адрес. Если вы не используете этот маршрут, вы можете просто удалить его с RouteConfig.cs, тогда URL будет /CustomerCare/EditCarrier/. Если вам нужен Terminals маршрут для любого контроллера, вы можете добавить ограничения к нему:

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

EDIT: Alternative вы можете также использовать @Html.RouteLink() и добавить название маршрута для генерации URL. Но тогда вам нужно указать контроллер и действие в параметрах. Второй параметр - это имя используемого маршрута:

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

Есть ли модификация, которую я могу внести в 'HTML.ActionLink', чтобы она не попала в маршрут терминала? В документах, которые я читал, говорится, чтобы перечислить маршруты от самых определенных до наименьших, и мне нужен этот маршрут. Терминал/URL-адрес будет совпадать с чем-то вроде дюжины контроллеров. – Matthew

+0

Возможно, терминалы должны быть областью MVC? – Carl

+0

@MatthewVerstraete Я обновил свой ответ. Вы можете использовать '@ Html.RouteLink()' для указания маршрута. –

Смежные вопросы