У меня есть маршрут, определенный следующим образом:
routes.MapRoute(
"CustomerWithScreenName", // Route name
"Customer/{sn}/{action}", // e.g. Customer/KingKong89/Schedule
new { controller = "Customer", action = "Signup", id = "" } // Parameter defaults
);
Но когда я формулирую ссылку, используя ActionLink, вот так:
<%: Html.ActionLink("Click here", "Schedule", "Customer", new { sn = "KingKong89", new { @class="topLink" } )%>
Полученная гиперссылка / URL выглядит так:
http://localhost:65071/Customer/Schedule?sn=KingKong89
Это работает, но я ожидал, что ActionLink будет использовать известные маршруты и создаст правильную ссылку, которая будет:
http://localhost:65071/Customer/KingKong89/Schedule
Неужели мои ожидания неверны? Это параметрированный URL, как он должен работать?
Примечание: я не указываю {controller} в маршруте. Кажется, я не могу смешать этот маршрут с более ортодоксальным маршрутом {controller} {action} {id} - возможно, мне следует прекратить пытаться быть умным и принять соглашение.
Спасибо за вашу помощь. Люк.
UPDATE
У меня есть теория, что без правильного маршрута (включая специальное ключевое слово {controller}) я не смогу заставить ActionLink создавать правильные URL-адреса.
Так что теперь я обращаю внимание на то, почему этот простой маршрут не работает:
routes.MapRoute(
"ControllerWithScreenName", // Route name
"{controller}/{sn}/{action}", // e.g. Customer/Dave/Schedule
new { controller = "Customer", action = "Signup", sn = "" } // Parameter defaults
);
Как единственный маршрут, наряду со стандартным «Root», он не играет в мяч. Если имя контроллера добавляется специально (как в первом фрагменте выше), оно делает.
ОБНОВЛЕНИЕ 2
Из-за нехватки времени я разочаровываюсь в своем URL-адресе в стиле param-to-action и возвращаюсь к стандартному контроллеру \ action \ param - это небольшая вещь в великой схеме достижения прогресса и не чувствовать разочарования подавленный.
ОБНОВЛЕНИЕ 3
Я собираюсь раскомментировать все свои умные маршруты и попробовать использовать RouteLink и указать тип используемого маршрута. Я думаю, что это и есть смысл комментария RouteLink.
ОБНОВЛЕНИЕ 4
Это не хорошо. Это требует, чтобы приложение знало маршруты, по которым нужно идти, что означает, что я теряю возможность просто изменить маршрут в будущем и автоматически обновлять все ссылки.