У меня есть вопрос относительно RouteLink против ActionLink.Почему RouteLink генерирует дружественный URL-адрес, в то время как 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
Почему это? Может кто-нибудь объяснить это мне, пожалуйста.
Hi. Это была моя первоначальная мысль, но когда я ввел данный URL в debugtool, например:/EnumVal1/SpecificAction/32/Yatzy, - он совпадает с тем же самым маршрутом, который я использую для RouteLink (это также единственный маршрут, который соответствует). – Terje
Вы путаете разбор URL с генерацией ссылок. Это две разные стороны монеты. Работа с парсингами в URL-адресе не означает, что генерация ActionLink также будет соответствовать ожидаемому вами маршруту. –
Ох. Как использовать отладчик маршрутизации, чтобы увидеть правую часть монеты? :) – Terje