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

Razor Page导航跳转至自身问题及传参求助

ASP.NET Core Razor Pages 跳转传参问题解决

问题根源拆解

你尝试的三种跳转方式各有错误,导致传参或页面响应异常:

  • 纯HTML链接:能跳转但不触发OnGetUserId,因为Razor Pages默认调用OnGet方法,自定义命名的OnGet[HandlerName]需要通过handler参数指定触发。
  • asp-page标签助手:参数拼接方式错误,不能直接把?id=test加在页面路径后,需用asp-route-*属性传递参数。
  • @Html.ActionLink:这是MVC控制器的用法,Razor Pages没有Controller/Action的概念,因此生成了错误的URL。

修正方案

1. 修正纯HTML链接(触发自定义Handler)

如果要保留OnGetUserId方法,需在URL中添加handler=UserId参数,明确指定要触发的处理方法:

<li><a href="../Jobs/CreateJob?id=test&handler=UserId">Job anlegen3</a></li>

2. 修正asp-page标签助手(推荐写法)

Razor Pages标签助手通过asp-route-{参数名}传递路由参数,如需触发自定义Handler,额外添加asp-page-handler属性:

<!-- 触发默认OnGet方法 -->
<a asp-page="../Jobs/CreateJob" asp-route-id="test">Job anlegen</a>

<!-- 触发OnGetUserId方法 -->
<a asp-page="../Jobs/CreateJob" asp-route-id="test" asp-page-handler="UserId">Job anlegen</a>

ActionLink是MVC专属方法,Razor Pages中直接改用上面的asp-page标签助手即可,无需依赖HtmlHelper的MVC方法。

优化PageModel代码

如果只是接收id参数并赋值,无需自定义Handler,用默认OnGet方法更简洁:

public class CreateJob : PageModel
{
    public string UserId { get; set; } = string.Empty;

    public async Task<IActionResult> OnGet(string id)
    {
        UserId = id;
        return Page();
    }
}

这种情况下,跳转链接不需要加handler参数,直接传递id即可触发OnGet并接收参数。

关键规则提醒

  • Razor Pages命名约定:OnGet()对应GET请求的默认处理,OnGet[HandlerName]()需通过?handler=[HandlerName]指定触发。
  • 参数传递优先用asp-route-*标签助手,避免手动拼接URL导致的路径错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 04:22:10