You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

RazorPages中如何将GET参数传递给OnGet方法?

问题原因

你遇到的参数获取异常是因为page是Razor Pages的内置路由预留参数,默认用于匹配页面的路径地址。你定义的page参数会优先匹配路由值而非查询字符串,因此拿到的是当前页面路径/Index,转int失败就会返回默认值0。

解决方案

有三种常用的处理方式:

方案1:调整参数名避开预留字段

最简单的方式是把参数名改为非预留名,比如pageNum、pageIndex,不需要额外加特性就能直接绑定:

public void OnGet(int pageIndex)
{
    // 前端传入?pageIndex=2即可拿到对应值
    pageIndex = pageIndex < 1 ? 1 : pageIndex;
    var items = yourDataSource.Skip((pageIndex - 1)*50).Take(50).ToList();
}

方案2:显式指定参数从查询字符串绑定

如果一定要使用page作为查询参数名,可以给参数加[FromQuery]特性,强制从查询字符串取值,优先级高于路由绑定:

using Microsoft.AspNetCore.Mvc;

public void OnGet([FromQuery] int page)
{
    page = page < 1 ? 1 : page;
    // 后续分页逻辑
}

方案3:用PageModel属性绑定

如果多个处理方法需要用到分页参数,也可以定义属性绑定,复用性更高:

using Microsoft.AspNetCore.Mvc;

public class IndexModel : PageModel
{
    private const int PageSize = 50;
    public List<YourItem> ItemList { get; set; }

    [BindProperty(SupportsGet = true)]
    [FromQuery(Name = "page")]
    public int PageIndex { get; set; }

    public void OnGet()
    {
        PageIndex = PageIndex < 1 ? 1 : PageIndex;
        ItemList = yourDataSource
            .Skip((PageIndex - 1) * PageSize)
            .Take(PageSize)
            .ToList();
    }
}

内容的提问来源于stack exchange,提问作者Mikhail Kriseev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 01:36:04