Почему RouteLink генерирует удобный URL-адрес, а ActionLink - нет?

StackOverflow https://stackoverflow.com/questions/1920593

Вопрос

У меня есть вопрос относительно 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 будет использоваться первый соответствующий маршрут, независимо от того, тот ли это, который вы предполагали, или нет.Ваши два примера, вероятно, соответствуют разным маршрутам.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top