剃刀页面链接忽略路由参数

Jon*_*ood 6 c# asp.net-core razor-pages

我无法相信找到如此简单的任务有多么令人沮丧。

我想创建一个带有page查询参数的链接。

我尝试了以下方法:

<a asp-page="Index" asp-route-page="10">Character Classifications</a>
Run Code Online (Sandbox Code Playgroud)

这是生成的链接。

<a href="/">Character Classifications</a>
Run Code Online (Sandbox Code Playgroud)

我已经谷歌搜索了一个小时。谁能告诉我Razor Pages创建带有查询参数的链接的方法?

另外,如果我链接到当前页面,是否有快捷方式?

Kir*_*kin 6

page保留的路由名称

以下关键字是保留名称,不能用作路由名称或参数:

  • 行动
  • 区域
  • 控制者
  • 处理程序

如果您更改asp-route-page为不在上面列表中的内容,例如asp-route-pageNumber,它将起作用。


Pos*_*rte 3

柯克的回答开门见山,但我想详细说明为什么这是不可能的以及保留字背后的原因。

官方原因——取自 github 问题——是这样的:

这个决定是在 2007 年 MVC 首次发布期间做出的。路由数据是用户代码可以查看、检查和修改的数据。路由值的“键”经常在用户提供的路由和对 api(如 Url.Route 和 Url.Action)的调用中键入。重要的是,任何“键”也必须是有效的 C# 标识符,以使其易于与接受匿名类型对象的 API 一起使用。我们决定不破坏页面,因为与其他简单的路由值相比,它会显得深奥且奇怪。

我认为人们可以争论使用“页面”作为路线是否深奥 - 我个人不这么认为 - 但也许这只是我。

由于其他几个人抱怨保留字问题,特别是您没有收到警告或合理的错误消息,因此打开了 github 问题以使用分析器解决此问题:

创建一个分析器以防止在代码 #4930 中使用保留关键字

遗憾的是直到今天(2019 年 8 月)这个问题还没有结束。

有一些讨论是为了重新设计 .NET 3.0 的内部结构,以便在路由时不再需要保留关键字。

但从今天开始 - 请注意不要在路由中使用任何保留字。