Почему RouteLink генерирует дружественный URL, в то время как ActionLink не делает?

У меня есть вопрос относительно 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

Почему это? Мог кто-то объяснять это мне.

7
задан Konamiman 17 December 2009 в 10:35
поделиться

1 ответ

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

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

4
ответ дан 7 December 2019 в 14:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: