Почему RouteLink генерирует удобный URL-адрес, а ActionLink - нет?
-
20-09-2019 - |
Вопрос
У меня есть вопрос относительно RouteLink противСсылка на действие.
Рассмотрим следующий маршрут
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
Почему это происходит?Не мог бы кто-нибудь объяснить мне это, пожалуйста.
Решение
RouteLink
может использовать только тот маршрут, который вы укажете. ActionLink
будет использоваться первый соответствующий маршрут, независимо от того, тот ли это, который вы предполагали, или нет.Ваши два примера, вероятно, соответствуют разным маршрутам.
Отладчик маршрутизации Фила Хаака помогло бы прояснить это.