我找不到解决方法。我有两个网址。它们是/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
链接。
答案 0 :(得分:1)
好吧,我已经在MVC框架内工作,我可以告诉您source_path: app/webpack
或Url.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)
以这种方式,参数会更改,并且视图相对于您视位置而定。