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 代码