ActionLink и относительный путь - PullRequest
0 голосов
/ 05 декабря 2018

Я не могу понять, как это решить.У меня есть два URL.Это /my-url-1 и /my-url-2.Оба переходят в разные виды.

Дело в том, что у меня есть ActionLink для вида /my-url-1, который должен составить /my-url-2 и перейти к этому виду.

Проблема в том, что ActionLink делает /my-url-1/my-url-2 URL-адресом, а не просто /my-url-2.

Я два дня искал способ его исправить, но ничего не смог найти.

PD: Я не использую Области, поэтому, пожалуйста, не говорите мне, что я просто должен поставить параметр "area" как "".

Это два URL-адреса, которые отправляются на разные контроллеры и выполняются разные действия.

Просмотр с ActionLink (URL: /my-url-1):

<div class="btn-index-container">
     @Html.ActionLink("Url 2", "MyAction", "MyController")
</div>

Этот ActionLink долженрендер:

<a href="/my-url-2">Url 2</a>

Но это рендеринг:

<a href="/my-url-1/my-url-2">Url 2</a>

, где /my-url-1 мой текущий URL

Конфигурация маршрута

         routes.MapRoute(
            name: "route1",
            url: "my-url-2", //without parameters
            defaults: new { controller = "MyController", action = "MyAction" },
        );

        routes.MapRoute(
            name: "route2",
            url: "my-url-1", //without parameters too
            defaults: new { controller = "MyController2", action = "MyAction2" }
        );

Итак, когда я перехожу к localhost:port/my-url-1, он загружает MyAction2, который отображает представление.Это представление внутри ActionLink (описано выше), которое должно отображать ссылку /my-url-2.

1 Ответ

0 голосов
/ 06 декабря 2018

Что ж, я работал в рамках MVC и мог бы рассказать вам, как работает Url.RouteUrl или Html.RouteLink.В конце, метод, который создает URL - это GetVirtualPathForArea (этот метод вызывается до UrlUtil.GenerateClientUrl, который получает VirtualPathData.cs, созданный GetVirtualPathForArea, в качестве параметра) из System.Web.Routing.RouteCollection.cs.

Здесь я оставил ссылку на исходный код MVC: https://github.com/aspnet/AspNetWebStack/blob/master/src/System.Web.Mvc

Я обнаружил, что мой Request.ApplicationPath менялся, когда я загружал /my-url-1.Это было сумасшествие, потому что путь к приложению был /.

Наконец, проблема заключалась в том, что /my-url-1 указывал на виртуальный каталог, созданный в IIS некоторое время назад по ошибке.Чтобы узнать, где находится ваш файл конфигурации IIS, перейдите по следующей ссылке:

удалить виртуальный каталог в IIS Express, созданный по ошибке

Решение было удалить .vsкаталог (который содержит конфигурацию .vs\config\applicationhost.config) и перестройку

Я думаю, что большинство помощников, которые отображают URL-адреса, работают более или менее одинаково, поэтому я надеюсь, что это будет полезно для всех вас!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...