如何让routelink返回正确的URL?

时间:2012-11-23 00:17:06

标签: asp.net-mvc asp.net-mvc-routing routelink

这是复制问题的程序。

  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")
    
  4. 正如您所看到的,生成的html代码对于2个页面是不同的。我希望URL是“/ Test”,它可以正确地为Index.cshtml呈现,但它对于About.cshtml变为“/ Test / About”。

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

4 个答案:

答案 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是页面名称,第一个“。”后没有任何字符。