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

ASP.NET Core获取URL参数时OnGetid方法未触发问题求助

Razor Pages中OnGetid方法未被调用的原因及解决方法

问题场景

通过前端代码创建跳转链接,URL携带id参数能正常打开目标页面,但后端定义的OnGetid方法始终未被触发:

前端跳转代码:

<div class="joboffer" onclick="location.href='/Jobs/JobOverview?id=@elem.Id';" style="cursor: pointer;">    
    <p>@elem.Title</p> 
</div>

后端处理代码:

public async Task<IActionResult> OnGetid(string id){    
    if (!_2_LogIn.IsLoggedIn)    
    {        
        await Response.WriteAsync("<script>alert('Nicht so schnell!!!')</script>");        
        return BadRequest();    
    }    
    else    
    {        
        // 处理url参数         
        return Page();    
    }
}

核心原因

Razor Pages的GET请求处理方法遵循严格的命名规则:

  • 默认的GET请求会触发OnGet方法(无自定义action名称时)
  • 命名格式为OnGet[ActionName]的方法,需要在URL中通过handler=[ActionName]指定要调用的action

你的代码中,OnGetid属于带自定义action的GET方法(action名为id),但跳转URL仅传递了id参数,没有指定handler=id,因此Razor Pages会默认寻找并调用OnGet方法(如果存在),而非OnGetid。

两种解决方法

方法一:改用默认OnGet方法(推荐)

直接使用默认的OnGet方法接收id参数,无需额外指定handler:

public async Task<IActionResult> OnGet(string id){    
    if (!_2_LogIn.IsLoggedIn)    
    {        
        await Response.WriteAsync("<script>alert('Nicht so schnell!!!')</script>");        
        return BadRequest();    
    }    
    else    
    {        
        // 处理id参数
        return Page();    
    }
}

此时原跳转URL无需修改,id参数会自动绑定到方法参数中。

方法二:保留OnGetid方法,修改跳转URL

如果必须使用命名处理方法,需要在跳转URL中添加handler=id参数:

<div class="joboffer" onclick="location.href='/Jobs/JobOverview?handler=id&id=@elem.Id';" style="cursor: pointer;">    
    <p>@elem.Title</p> 
</div>

这样Razor Pages会识别到handler=id,自动调用对应的OnGetid方法,同时id参数也会正常传递。

额外提示

Response.WriteAsync在返回BadRequest()后可能无法正常执行(因为BadRequest会终止响应流程),建议改用TempData传递提示信息,在前端页面通过逻辑渲染弹窗,更符合Razor Pages的开发规范。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 08:20:18