如何创建点击后跳转至其他Razor Page的按钮?
在Razor Pages中用按钮实现页面跳转/触发Post方法的解决方案
我明白你现在的困扰——锚点标签助手用得好好的,但换成按钮就要么跳不动,要么Post方法根本不触发,之前非.NET Core的写法还能用,到Razor Pages就失灵了对吧?我来给你拆解两种常见场景的解决方案,还有排查问题的关键点:
一、用按钮实现类似锚点的GET跳转(无数据提交,仅跳转)
如果只是想替代锚点的跳转功能(不需要提交数据,只是跳转到目标页面),有两种简单的实现方式:
方式1:用Form+Submit按钮(纯HTML/Razor标签助手)
这种方式和锚点的GET请求逻辑一致,只是用按钮触发:
<!-- 跳转到指定页面,可传递路由参数 --> <form asp-page="/Reports/Edit" method="get"> <!-- 传递ID参数,对应目标页面的路由参数 --> <input type="hidden" asp-route-id="123" /> <button type="submit" class="btn btn-primary">编辑报告</button> </form>
注意:
method="get"是关键,这样点击按钮会发起GET请求,和锚点的行为完全一致。
方式2:用JavaScript直接跳转(更简洁)
如果不想写Form,直接给按钮加点击事件跳转:
<button type="button" onclick="window.location.href='@Url.Page("/Reports/Edit", new { id = 123 })'" class="btn btn-primary">编辑报告</button>
这种方式不需要依赖Form,直接通过JS修改页面地址,适合简单的跳转场景。
二、触发Post方法后跳转(需要先处理数据再跳转)
如果你需要点击按钮后先执行服务器端的Post逻辑(比如保存数据),再跳转到目标页面,但OnPostEditReport方法从未被调用,大概率是以下几个细节没做好,给你正确的示例和排查点:
正确的代码示例
页面(.cshtml)部分:
<!-- 注意method="post",指定handler为EditReport --> <form method="post" asp-page-handler="EditReport"> <!-- 传递需要的参数,比如报告ID --> <input type="hidden" name="reportId" value="123" /> <!-- 必须添加防跨站令牌,Razor Pages默认会拦截无令牌的Post请求 --> @Html.AntiForgeryToken() <button type="submit" class="btn btn-primary">提交并编辑报告</button> </form>
页面模型(.cshtml.cs)部分:
public class YourPageModel : PageModel { // 方法名必须是OnPost[HandlerName]的格式,这里HandlerName是EditReport public async Task<IActionResult> OnPostEditReport(int reportId) { // 这里写你的Post逻辑,比如验证数据、保存到数据库等 // ... // 逻辑完成后跳转到目标页面 return RedirectToPage("/Reports/Edit", new { id = reportId }); } }
排查Post方法不触发的常见坑
- 按钮类型不对:如果按钮的
type="button",Form不会自动提交,必须用type="submit"(默认是submit,除非手动修改)。 - Handler名称不匹配:
OnPostEditReport对应的handler名称是EditReport,所以asp-page-handler="EditReport"不能写错大小写或者拼写。 - 缺少防跨站令牌:Razor Pages会默认拦截没有AntiForgeryToken的Post请求,所以必须确保Form里有
@Html.AntiForgeryToken(),或者给Form加上asp-antiforgery="true"。 - Form的Method错误:如果写成
method="get",会触发OnGetEditReport而不是OnPostEditReport。 - 参数传递失败:如果方法里有参数(比如
reportId),Form里必须有对应的input或者asp-route-*参数,否则方法可能无法匹配触发。
内容的提问来源于stack exchange,提问作者Blingers
相关产品推荐
相关产品推荐

