ActionLink和相对路径

时间:2018-12-05 14:16:04

标签: c# asp.net asp.net-mvc razor asp.net-mvc-5

我找不到解决方法。我有两个网址。它们是/my-url-1/my-url-2。两者都有不同的看法。

问题是,我在/my-url-1的视图上有一个ActionLink,该链接应该使/my-url-2进入该视图。

问题在于ActionLink将/my-url-1/my-url-2用作URL,而不仅仅是/my-url-2

我正在搜索有关如何解决它的两天,但找不到任何东西。

PD:我没有使用Areas,所以请不要告诉我我应该将“ area”参数放在“”中。

这是两个指向不同控制器和不同动作的网址。

具有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是我当前的网址

路由配置

         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链接。

2 个答案:

答案 0 :(得分:1)

好吧,我已经在MVC框架内工作,我可以告诉您source_path: app/webpackUrl.RouteUrl的工作方式。最后,用于创建URL的方法是{}中的Html.RouteLink(此方法在GetVirtualPathForArea之前被调用,它接收由UrlUtil.GenerateClientUrl创建的VirtualPathData.cs作为参数)。 {1}}。

在这里我留下了指向MVC源代码的链接: https://github.com/aspnet/AspNetWebStack/blob/master/src/System.Web.Mvc

我发现,加载GetVirtualPathForArea时,我的System.Web.Routing.RouteCollection.cs正在更改。太疯狂了,因为应用程序路径为Request.ApplicationPath

最后,问题是/my-url-1指向前一段时间在IIS上错误创建的虚拟目录。 要了解您的IIS配置文件在哪里,请点击以下链接:

remove virtual directory in IIS Express created in error

解决方案是删除/目录(其中包含配置/my-url-1)并重建

我认为大多数呈现URL的辅助程序或多或少都以相同的方式工作,所以我希望它对所有人都有用!

答案 1 :(得分:0)

在您的情况下,可能没有必要,只需传递带有空值(例如E.G.)的参数即可。

@Html.ActionLink("Español", null, null, new { Lng = "es" }, null)

以这种方式,参数会更改,并且视图相对于您视位置而定。