HTML.ActionLink дает разные результаты в зависимости от URL-адреса
-
10-12-2019 - |
Вопрос
У меня есть URL-адрес http://localhost:xyz/HelloWorld
, который направляет к HelloWorld
действие в Home
контроллер.
На странице, которая отображается по URL, у меня есть Html.ActionLink, которая указывает на ту же страницу (да, ссылка на страницу, на которой вы находитесь в данный момент).
Проблема в том, что эта ссылка указывает на страницу только в том случае, если страница загружена как http://localhost:xyz/HelloWorld/
(с косой чертой в конце).Если страница загружена как http://localhost:xyz/HelloWorld
(без косой черты), он указывает на Index
действие Home
контроллер.
Я перепробовал несколько перегрузок, но не могу понять, в чем причина этого или как это исправить.
Html.ActionLink("Hello World", "HelloWorld", "Home");
Html.ActionLink("Hello World", "HelloWorld", "Home", null, null);
Html.ActionLink("Hello World", "HelloWorld", "Home", new { arg = 0 }, null);
Все это приводит к совершенно одинаковому результату.Они прекрасно работают, если есть завершающая косая черта, и направляют на http://localhost:xyz/
если его нет.
Кто-нибудь может объяснить такое поведение или как это исправить?
РЕДАКТИРОВАТЬ (возможно, это имеет отношение к делу?):
Когда arg
присутствует, а не 0, та же страница отображается по адресу http://localhost:xyz/HelloWorld/arg
, и имеет ссылку "Hello World" (которая работает совершенно нормально), и аналогичную ссылку, которая работает безупречно.
Html.ActionLink("Argument", "HelloWorld", "Home", new {arg = arg}, null);
Это правильно указывает на само себя, независимо от того, присутствует ли завершающая косая черта или нет.
маршруты:
routes.MapRoute(
"HomeStart",
"",
new { controller = "Home", action = "Index" }
);
routes.MapRoute(
"Hello World",
"HelloWorld/{arg}",
new {controller = "Home", action = "HelloWorld", arg = ""}
);
Решение
Проблема решена.Я разделил маршруты на "с аргументом" и "без аргумента".
routes.MapRoute(
"Hello World",
"HelloWorld",
new {controller = "Home", action = "HelloWorld"}
);
routes.MapRoute(
"Hello World With Arg",
"HelloWorld/{arg}",
new {controller = "Home", action = "HelloWorld", arg = ""}
);