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

Posted

技术标签:

【中文标题】ASP.NET Razor Pages 路由参数命名页面【英文标题】:ASP.NET Razor Pages route parameter named page 【发布时间】: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 方法并更好地描述了它 【参考方案1】:

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

马歇尔

【讨论】:

【参考方案2】:

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

@Html.ActionLink("Title","0","Dataset",newpage=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 键,因此只需更改路由值的名称即可。

【讨论】:

以上是关于ASP.NET Razor Pages 路由参数命名页面的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET Core Razor Pages 强制 Anchor Tag Helper (asp-page) 使用小写路由

ASP.NET Core 2.2 Razor 页面中的自定义路由

asp.net Razor Pages - 根据另一个选择列表的选择更新选择列表

ASP.NET Web Pages - 添加 Razor 代码

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

Asp.net core razor pages 加载部分页面