【问题标题】:Razor page link ignores route argumentRazor 页面链接忽略路由参数
【发布时间】: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 方法创建带有查询参数的链接?

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

【问题讨论】:

    标签: c# asp.net-core razor-pages


    【解决方案1】:

    pagereserved 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 的内部结构,以便在路由方面不再需要保留关键字。

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

      【讨论】:

        猜你喜欢
        • 2012-04-30
        • 2018-07-07
        • 2020-04-03
        • 1970-01-01
        • 2020-04-03
        • 2020-05-01
        • 2018-10-16
        • 2014-02-22
        • 2023-03-24
        相关资源
        最近更新 更多