我找不到如何解决这个问题。我有两个网址。这些是/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.RouteUrl
或Html.RouteLink
是如何工作的。最后,创建URL的方法从System.Web.Routing.RouteCollection.cs
GetVirtualPathForArea
(此方法在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)
这样,参数会发生变化,并且视图是相对的,具体取决于您所在的位置。