Razor 页面链接忽略路由参数
Posted
技术标签:
【中文标题】Razor 页面链接忽略路由参数【英文标题】:Razor page link ignores route argument 【发布时间】:2019-12-15 10:32:43 【问题描述】:我无法相信我找到这么简单的任务是多么令人沮丧。
我想创建一个带有 page
查询参数的链接。
我尝试了以下方法:
<a asp-page="Index" asp-route-page="10">Character Classifications</a>
这是生成的链接。
<a href="/">Character Classifications</a>
我已经在谷歌上搜索了一个小时。谁能告诉我使用 Razor Pages 方法创建带有查询参数的链接?
另外,如果我要链接到当前页面,是否有快捷方式?
【问题讨论】:
【参考方案1】:page
是reserved routing name:
以下关键字为保留名称,不能用作路由名称或参数:
动作 地区 控制器 处理程序 页面
如果您将 asp-route-page
更改为不在上述列表中的内容,例如asp-route-pageNumber
,它会工作的。
【讨论】:
【参考方案2】:Kirk 的回答直截了当,但我想详细说明为什么不可能以及保留字背后的原因。
官方的原因——取自 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 的内部结构,以便在路由方面不再需要保留关键字。
但从今天开始 - 请注意不要在路由中使用任何保留字。
【讨论】:
以上是关于Razor 页面链接忽略路由参数的主要内容,如果未能解决你的问题,请参考以下文章