操作链接和相对路径



我找不到如何解决这个问题。我有两个网址。这些是/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:我没有使用区域,所以请不要告诉我我应该将"area"参数作为"。

这是两个指向不同控制器和不同操作的 URL。

具有动作链接(网址:/my-url-1) 的视图:

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

此操作链接应呈现:

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

嗯,我在MVC框架中工作过,我可以告诉你Url.RouteUrlHtml.RouteLink是如何工作的。最后,创建URL的方法从System.Web.Routing.RouteCollection.csGetVirtualPathForArea(此方法在UrlUtil.GenerateClientUrl之前调用,它接收GetVirtualPathForArea创建的VirtualPathData.cs作为参数)。

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

我发现,当我加载/my-url-1时,我的Request.ApplicationPath正在发生变化。这很疯狂,因为应用程序路径/

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

删除错误创建的 IIS 中的虚拟目录

解决方案是删除.vs目录(其中包含配置.vsconfigapplicationhost.config)并重建

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

在您的情况下,也许没有必要,只需传递带有空值的参数,例如

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

这样,参数会发生变化,并且视图是相对的,具体取决于您所在的位置。

最新更新