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>
3. 替换@Html.ActionLink
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
相关产品推荐
相关产品推荐

