#asp.net-mvc #model-view-controller #routes
#asp.net-mvc #модель-представление-контроллер #маршруты
Вопрос:
Я использую метод RegisterRoutes в глобальном файле, чтобы перенаправить URL пользователя на фактический URL.
routes.MapRoute("Blog",
"blog/dp/{id}",
new { controller ="Blog", action = "Details" });
Как вы могли догадаться, Blog — это контроллер, а Details — его действие.
Итак, проблема в том, что следующий код не генерирует URL-адрес моего желания, в URL-адресе которого есть слово dp. Кстати, я не хочу менять название своего действия.
@Html.ActionLink( "headline", "Details", "Blog", new { id="1200" }, null )
Заранее спасибо 😉
Комментарии:
1. Правильно ли маршрутизируется URL-адрес? Если вы введете URL
http://site/blog/dp/1200
, приведет ли это к правильной странице? И есть ли у вас какие-либо другие маршруты, которые сопоставляются с тем же контроллером? Это может помочь включить все ваши маршруты в ваш вопрос.2. Да, он перенаправляет на правильную страницу 😉 моя проблема в том, что actionlink генерирует этот » сайт / блог / Подробности? id = 1200 »
Ответ №1:
Вы могли бы использовать RouteLink вместо ActionLink. В RouteLink вы можете явно передать свое имя маршрута:
@Html.RouteLink("headline", "Blog", new { controller = "Blog", action = "Details" })
Подробнее о методе RouteLink можно найти в MSDN. Изменение порядка маршрутов может выполнить эту работу, но это довольно хрупкий механизм.
Ответ №2:
ActionLink может использовать маршрут, отличный от того, который вы предоставляете в вопросе. Есть ли у вас какие-либо маршруты, объявленные до этого?
Маршруты сопоставляются в том порядке, в котором вы их предоставляете. Итак, например, если у вас было что-то вроде:
routes.MapRoute("Blog",
"blog/dp", // {id} is not provided in this one
new { controller ="Blog", action = "Details" });
объявленный перед этим маршрутом:
routes.MapRoute("Blog",
"blog/dp/{id}",
new { controller ="Blog", action = "Details" });
Сначала будет сопоставлен первый маршрут, и вы увидите /blog/dp /?id=1200 вместо /blog/ dp / 1200.
Комментарии:
1. Спасибо за ваш ответ, но мои MapRoutes работают нормально, и моя проблема в том, что actionlink не может быть использован в упомянутом сценарии. Кстати, я знаю, что могу обойти эту проблему с помощью тега <a> .