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