这是复制问题的程序。
在“默认”路线之前将以下行添加到RegisterRoutes()方法
routes.MapRoute(
name: "Test",
url: "Test/{action}",
defaults: new { controller = "Test", action = "Index" }
);
将以下内容添加到Index.cshtml和About.cshtml
@Html.RouteLink("link to TestController", "Test")
正如您所看到的,生成的html代码对于2个页面是不同的。我希望URL是“/ Test”,它可以正确地为Index.cshtml呈现,但它对于About.cshtml变为“/ Test / About”。
我的问题是,是否有任何记录的方法来生成相同的正确URL。上面的示例仅用于演示目的。我想使用路由表信息来生成菜单。
答案 0 :(得分:3)
似乎引擎正在设置当前页面的action
路由值(“索引”,“关于”)。因此解决这个问题的一种方法是“取消设置”该路由值:
@Html.RouteLink("link to Test Controller", "Test", new { action = String.Empty })
答案 1 :(得分:2)
注册路线
routes.MapRoute(
name: "TestUrl",
url: "Test",
defaults: new { controller = "TestController", action = "TestAction" }
);
将以下内容添加到TestAction.cshtml
@Html.RouteLink("Test", "TestUrl")
现在您的网址为/ Test,希望这对您有帮助。
答案 2 :(得分:2)
最快的方法是指定一个空白操作。
@Html.RouteLink("link to TestController", "", "Test")
这将产生/Test
答案 3 :(得分:0)
对于那些到达这里寻找 .netcore剃须刀页面RouteLink 语法的用户,请不要使用RouteLink的“ page ”保留成员。正如某些人建议的那样,它不适用于routeValues对象。而是使用以下格式:
<a asp-page="RazorPage">RazorPage</a>
这可处理尾部斜杠和尾部正斜杠。 RazorPage是页面名称,第一个“。”后没有任何字符。