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

时间:2019-08-07 18:25:34

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

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

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

我尝试了以下操作:

<a asp-page="Index" asp-route-page="10">Character Classifications</a>

这是生成的链接。

<a href="/">Character Classifications</a>

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

还可以链接到当前页面吗?

2 个答案:

答案 0 :(得分:6)

pagereserved 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的内部进行重新处理,以便在路由时不再需要保留关键字。

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