Razor Page中asp-page-handler无法触发处理器并报400错误
解决Razor Page购物车移除按钮触发400错误、OnPostRemove未执行的问题
我之前也碰到过一模一样的情况,先梳理下你的场景:你在Razor Page里开发购物车商品移除功能,用了带asp-page-handler属性的表单,前端和后端代码都写好了,但点击移除按钮时直接报400错误,后端的OnPostRemove方法完全没触发。
先贴出你提到的代码方便大家对照:
前端Cart.cshtml代码:
<td class="text-center"> <form asp-page-handler="Remove" method="post"> <input type="hidden" name="id" value="@line.Product.Id" /> <input type="hidden" name="returnUrl" value="@Model.ReturnUrl" /> <button type="submit" class="btn btn-sm btn-danger"> Remove </button> </form> </td>
后端Cart.cshtml.cs的OnPostRemove方法:
public IActionResult OnPostRemove(int id, string returnUrl) { Cart.RemoveLine(Cart.Lines.First(cl => cl.Product.Id == id).Product); return RedirectToPage(new { returnUrl = returnUrl }); }
问题根源与解决方案:
这个问题的核心是Razor Page的官方标签助手没有被注册,asp-page-handler这类特殊属性需要依赖Microsoft.AspNetCore.Mvc的标签助手才能正确解析,生成符合Razor Page路由规则的请求参数。
你只需要在_ViewImports.cshtml文件中添加下面这行代码,完成标签助手的注册:
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
添加之后,标签助手会自动处理asp-page-handler属性,在表单提交时正确携带handler参数,后端就能正常接收到请求并执行OnPostRemove方法,400错误也会随之消失。
内容的提问来源于stack exchange,提问作者ismet
相关产品推荐
相关产品推荐

