Razor页面向Action方法传值时应用ID始终为0问题求助
问题核心原因
- AJAX请求的参数格式错误,直接传递纯数值未指定参数名,后端模型绑定器无法匹配到对应入参,因此取默认值0
dataType配置错误,jQuery的dataType用于指定预期的服务端返回值类型,不支持int这类基础类型值- 若使用Razor Pages框架(你的方法命名
OnPostDeleteAsync符合Razor Pages规范),默认开启POST请求防伪令牌校验,未传递令牌也可能导致参数绑定异常
修改方案
1. 调整前端AJAX代码
$(function () { var applicationID; console.log("Document Ready starting...."); $(document).on("click", "#modalDeleteButtonX", function (event) { console.log("applicationID to Delete: " + applicationID); $.ajax({ type: "POST", url: "@Url.Action("Delete", "Applications")", // 调整为键值对格式,键名和后端参数名完全匹配 data: { applicationId: applicationID }, // 新增防伪令牌头(Razor Pages必须,MVC按需开启) headers: { "RequestVerificationToken": $('input[name="__RequestVerificationToken"]').val() }, // 移除错误的dataType配置,jQuery会自动识别返回值类型 success: function (data) { console.log("success"); // 按需添加删除成功后的逻辑,比如刷新列表或者移除对应DOM location.reload(); }, failure: function (response) { console.log("failure"); }, error: function (response) { console.log("error: " + response.responseText); } }); }); $('#modal-delete').on('show.bs.modal', function (event) { var button = $(event.relatedTarget); applicationID = button.data("id"); $('#ItemToDelete').val(applicationID); }); console.log("Document Ready finished...."); });
同时在页面(Index.cshtml或者分部视图)任意位置添加防伪令牌生成代码:
@Html.AntiForgeryToken()
2. 后端代码可选调整
如果调整前端后参数依然绑定失败,给入参添加[FromForm]标记强制从表单域取值:
public IActionResult OnPostDeleteAsync([FromForm] int applicationId) { if (applicationId == 0) return Page(); int affectedRows = _applicationRepository.DeleteApplication(applicationId); // 按需调整返回结果,比如删除成功后重定向到列表页 return RedirectToPage("Index"); }
内容的提问来源于stack exchange,提问作者kouwerp
相关产品推荐
相关产品推荐

