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 代码对于 2 个页面是不同的。我希望 URL 是“/Test”,它为 Index.cshtml 正确呈现,但它成为 About.cshtml 的“/Test/About”。

我的问题是是否有任何记录的方式来生成相同的正确 URL。上面的例子只是为了演示目的而创建的。我想使用路由表信息来生成菜单。

4

4 回答 4

5

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

@Html.RouteLink("link to Test Controller", "Test", new { action = String.Empty })
于 2012-11-23T00:28:29.183 回答
2

注册您的路线

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

将以下内容添加到 TestAction.cshtml

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

现在您的 URL 是 /Test,希望这会对您有所帮助。

于 2012-11-23T07:38:15.413 回答
2

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

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

这将产生/Test

于 2012-11-29T22:22:53.090 回答
0

对于那些到这里来寻找.netcore razor page RouteLink语法的人,不要使用 RouteLink 的“ page ”保留成员。正如一些人所建议的,它不适用于 routeValues 对象。相反,请使用以下格式:

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

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

于 2020-04-28T16:00:43.977 回答