如何在ASP.NET Core的data-ajax-success中同时获取响应数据与表单元素?
解决方案:同时获取Unobtrusive AJAX的响应数据与表单元素
这个问题我之前也碰到过,ASP.NET的Unobtrusive AJAX其实给data-ajax-success的回调函数提供了内置参数,刚好能满足你同时拿到响应数据和触发表单的需求,具体修改步骤如下:
1. 修改页面表单的data-ajax-success属性
去掉原来的deleteItem(this),直接指定函数名即可,Unobtrusive AJAX会自动传递必要的参数:
<form method="post" asp-route-id="@item.Id" data-ajax="true" data-ajax-confirm="Are you sure?" data-ajax-success="deleteItem"> <input type="submit" value="delete" asp-route-id="@item.Id" class="dropdown-item" /> </form>
2. 更新JavaScript回调函数
Unobtrusive AJAX的成功回调会自动传入四个参数,我们可以利用关键参数来实现需求:
function deleteItem(response, status, xhr, form) { // 判断后端返回的状态码是否为成功(对应你后端定义的Status=0) if (response.Status === 0) { // 通过表单元素找到对应的表格行并隐藏(或直接删除) $(form).closest('tr').css({ "display": "none" }); // 如果你想直接删除行而不是隐藏,可以用: // $(form).closest('tr').remove(); } else { // 失败时可以给用户提示 alert(`删除失败:${response.Massage}`); } }
参数说明
Unobtrusive AJAX传入回调的四个参数顺序固定:
response:后端返回的JSON数据(就是你后端代码里的JsonType对象)status:响应状态字符串(比如"success")xhr:XMLHttpRequest实例对象form:触发本次AJAX请求的表单DOM元素
这样修改后,就只有当后端删除操作成功(返回Status=0)时,才会隐藏页面上对应的表格行,完美解决了你之前“删除失败也隐藏行”的问题。
内容的提问来源于stack exchange,提问作者R-S
相关产品推荐
相关产品推荐

