我不敢相信找到如此简单的任务有多么令人沮丧。
我想创建一个带有page
查询参数的链接。
我尝试了以下操作:
<a asp-page="Index" asp-route-page="10">Character Classifications</a>
这是生成的链接。
<a href="/">Character Classifications</a>
我已经谷歌搜索了一个小时。谁能告诉我Razor Pages创建带有查询参数的链接的方法吗?
还可以链接到当前页面吗?
答案 0 :(得分:6)
page
是reserved routing name:
以下关键字是保留名称,不能用作路由名称或参数:
- 动作
- 区域
- 控制器
- 处理程序
- 页面
如果您将asp-route-page
更改为上面列表中未列出的内容,例如asp-route-pageNumber
,就可以了。
答案 1 :(得分:2)
柯克的回答很直接,但是我想详细说明为什么这是不可能的,以及保留字背后的原因。
官方原因-摘自github问题-如下:
该决定是在2007年MVC的初始发行版中做出的。 路线数据是用户代码可以查看,检查和修改的内容。 路线值之类的“键”经常在用户提供的框中输入 路由和对API的调用,例如Url.Route和Url.Action。这一点很重要 任何“键”也是有效的C#标识符,以使其易于使用 带有接受匿名类型对象的API。我们做了一个 决定不捣乱页面,因为这太深奥了 与其他简单明了的路线值相比。
我认为有人可以争论是否使用“页面”作为路线是深奥的-我个人并不这么认为-但这也许就是我。
由于其他几个人抱怨保留字问题,尤其是您没有收到警告或明智的错误消息,因此打开了github问题以使用分析器解决此问题:
Create an Analyzer to prevent usage of reserved keywords in code #4930
不幸的是,直到今天(2019年8月),该问题尚未解决。
现在有一些讨论可以对.NET 3.0的内部进行重新处理,以便在路由时不再需要保留关键字。
但是从今天开始-请注意,请勿在路由中使用任何保留字。