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 页面链接忽略路由参数的主要内容,如果未能解决你的问题,请参考以下文章

模型绑定来自 Razor 页面发布表单上的路由参数

在 .Net Core razor 页面中传递路由参数

angular路由与a链接跳转有什么不同?

到基础 Razor 页面的多个别名路由

ASP.NET Razor Pages 路由参数命名页面

具有多个路由参数的 ASP.NET Core Razor 页面层次结构