【问题标题】:ASP.NET Razor Pages route parameter named pageASP.NET Razor Pages 路由参数命名页面
【发布时间】:2018-07-07 23:45:51
【问题描述】:

我想在我的 razor pages 应用程序中使用名为 page 的 url 参数:

http://example.com/Dataset/0?page=X

我尝试使用这样的锚标记助手:

<a asp-page="Dataset" asp-route-id="@(dataset.Id)" asp-route-page="@(pageNumber)">@(dataset.Title)</a>

但这不起作用,似乎asp-page和asp-route-page相互冲突,结果是:

http://example.com/Dataset/0

上面的问题可以很容易地通过在html中输入来解决,所以这不是一个真正的问题。

真正的问题:我尝试手动将 ?page=100 添加到 url 的末尾,我检查了 OnGet 方法中的值及其 0,就好像参数丢失了一样。

编辑:当您在浏览器中访问剃须刀页面时会调用此方法,该方法的参数与来自url查询的参数名称相同,它们会从查询中自动填充,页面参数除外

public FileResult OnGet(int id, string subject, string predicate, string @object, int page)
    {
        // page==0 in this scope even if the query is ?page=30 etc
        // other parameters work fine
    }

【问题讨论】:

  • 请分享操作方法的代码。
  • 更新了 OnGet 方法并更好地描述了它

标签: c# asp.net razor


【解决方案1】:

在这种情况下,“页面”是一个保留术语,因此您不应在路由中使用它,否则会混淆路由引擎。

马歇尔

【讨论】:

    【解决方案2】:

    有几种方法可以在 Razor 语法中发送参数。 你可以使用

    @Html.ActionLink("Title","0","Dataset",new{page=100})
    

    或者你可以使用如下标签:

    <a href="http://example.com/Dataset/0?page=@pageNumber">@dataset.Title</a>
    

    【讨论】:

    • 问题是服务器以某种方式丢弃了页面参数。我可以像在第二个示例中那样手动放置整个 url,但在后面代码中的 OnGet 方法中,参数为 0。
    • 你在控制器中添加了这个方法吗?用于测试从浏览器 URL 向此方法发送调用并检查它是否正在接收!这可能是参数名称或数据类型的问题!
    • 你不必调用整个 url 好友只需调用你想使用参数移动的页面 :) 它已经过测试 Here You Go
    【解决方案3】:

    您不能将 page 用作 razor 页面的路由值,因为该路由值被 razor 页面引擎使用。

    raozor 页面的路径作为路由值添加到路由字典值中,使用 page 键,因此只需更改路由值的名称即可。

    【讨论】:

      猜你喜欢
      • 2020-10-23
      • 1970-01-01
      • 2019-05-22
      • 2020-05-06
      • 2021-04-16
      • 2018-12-05
      • 2019-12-15
      • 2018-02-17
      • 2018-04-05
      相关资源
      最近更新 更多