如何使路由链接返回正确的URL?

问题描述 投票:4回答:4

这里是复制问题的过程。

  1. 启动新的mvc 4项目。
  2. 在“默认”路由之前,将以下几行添加到RegisterRoutes()方法中

    routes.MapRoute(
            name: "Test",
            url: "Test/{action}",
            defaults: new { controller = "Test", action = "Index" }
    );
    
  3. 将以下内容添加到Index.cshtml和About.cshtml

    @Html.RouteLink("link to TestController", "Test")
    

如您所见,这两个页面生成的html代码是不同的。我希望URL是为Index.cshtml正确呈现的“ / Test”,但对于About.cshtml,它将变为“ / Test / About”。

我的问题是,是否有任何记录的方式来生成相同的正确URL。上面的示例仅用于演示目的。我想使用路由表信息来生成菜单。

asp.net-mvc asp.net-mvc-routing routelink
4个回答
3
投票

似乎引擎正在从当前页面设置action路线值(“索引”,“关于”)。因此,解决此问题的一种方法是“重置”该路由值:

@Html.RouteLink("link to Test Controller", "Test", new { action = String.Empty })

2
投票

注册您的路线

 routes.MapRoute(
                name: "TestUrl",
                url: "Test",
                defaults: new { controller = "TestController", action = "TestAction" }
            );

将以下内容添加到TestAction.cshtml

 @Html.RouteLink("Test", "TestUrl")

现在您的URL是/ Test,希望能为您提供帮助。


2
投票

最快的方法是只指定一个空白操作。

@Html.RouteLink("link to TestController", "", "Test")

这将产生/Test


0
投票

对于那些到这里寻找。netcore剃须刀页面RouteLink语法的人,请不要使用RouteLink的“ page”保留成员。正如某些人建议的那样,它不适用于routeValues对象。而是使用以下格式:

<a asp-page="RazorPage">RazorPage</a>

这处理尾随和不存在尾随正斜杠。 RazorPage是页面名称,第一个“。”后没有任何字符。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.