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