#asp.net-mvc #razor
#asp.net-mvc #бритва
Вопрос:
В настоящее время в моем проекте я использую @Url.Action для создания ссылок в атрибуте href тегов привязки.
например:
<a href='@Url.Action("Index", "Home", new { id = 10 })' id="btn">Click</a>
И это работает нормально, каким бы ни был созданный URL…
/home/index?id=10
есть ли способ вернуть URL-адрес
/home/index/10
для SEO и эстетических целей? Я использовал идентификатор и номер в качестве заполнителя — в реальном приложении он может и будет использовать вместо этого строку (so…
<a href='@Url.Action("Index", "Home", new { name="test" })' id="btn">Click</a>
чтобы вернуть URL-адрес
/home/index/test
Комментарии:
1.
Url.Action
будет ли использоваться ваша таблица маршрутизации, правильно ли она настроена, чтобы разрешить это?2. @DavidG Это разрешено, так как я могу использовать полный URL. Однако оба ведут на одну и ту же страницу.
/home/index/test
работает — но так же/home/index?name=test
Ответ №1:
Вам необходимо убедиться, что маршрутизация правильная. Убедитесь, что у вас есть такой маршрут:
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional });
Для вашего «реального приложения», поскольку вы используете вызываемый параметр name
, вам понадобится такой, который выглядит следующим образом:
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{name}",
defaults: new { controller = "Home", action = "Index" });