Почему RouteLink генерирует дружественный URL, а ActionLink - нет? - PullRequest
7 голосов
/ 17 декабря 2009

У меня есть вопрос относительно RouteLink и ActionLink.

Рассмотрим следующий маршрут

routes.MapRoute("Routename1",
    "{someEnum}/SpecificAction/{id}/{stringId}",
    new { controller = "MyController", id = (int?)null, stringId= (string)null, action = "SpecificAction" },
    new { someEnum= "(EnumVal1|EnumVal2)" }
);

Странная часть {someEnum} заключается в том, что я использую общий контроллер для всех значений перечисления, которые образуют типичную часть контроллера URL-адреса. Например, / EnumVal1 / Action / и / EnumVal2 / Action / используют один и тот же контроллер. Однако это не является частью проблемы.

Рассмотрим два следующих способа соединения:

<%=Html.RouteLink("Click me","Routename1", new { id = 32, stringId = "Yatzy" })%> 
<%=Html.ActionLink("Click me", "SpecificAction", "EnumVal1", new { id = 32, stringId = "Yatsy" }, null)%>

RouteLink генерирует правильный URL-адрес, который будет / EnumVal1 / SpecificAction / 32 / Yatzy

ActionLink генерирует URL, который выглядит как / EnumVal1 / SpecificAction / 32? StringId = Yatzy

Почему это? Может кто-нибудь объяснить это мне, пожалуйста.

1 Ответ

4 голосов
/ 17 декабря 2009

RouteLink может использовать только один указанный вами маршрут . ActionLink будет использовать первый соответствующий маршрут, будь то тот, который вы намеревались или нет. Ваши два примера, вероятно, соответствуют различным маршрутам.

Отладчик маршрутизации Фила Хаака поможет прояснить это.

...