ASP.NET Core中局部视图的jQuery脚本无法运行,如何修复?
问题修正方案
你的代码存在两个核心问题,导致复选框状态变化时无法自动触发表单提交:
- 选择器范围过广,绑定了所有复选框的
change事件,易引发冲突或误触发 - 直接使用
trigger('submit')无法正确触发ASP.NET Unobtrusive Ajax的异步提交逻辑
修正后的完整代码
@model SetIsApprovedModel <form id="frmApprove" data-ajax="true" data-ajax-method="post" data-ajax-url="@(Url.Action("SetApprove", "AccountAdmin"))" data-ajax-success="onsuccess" data-ajax-mode="replace" data-ajax-update="#approvePartial" data-ajax-loading="#loadingApprove" data-ajax-failure="failed"> <input type="hidden" asp-for="@Model.UserName" /> <div class="row px-3 mb-1"> <div class="col-md-5 text-md-end fw-bold">Approved: </div> <div class="col-md-7 text-md-start" id="IsApprovedDiv"> <input id="chkApprove" type="checkbox" asp-for="@Model.IsApproved" /> </div> <input type="submit" value="Submit" /> </div> </form> <script> $(document).ready(function () { // 精准绑定目标复选框的change事件 $(document).on('change', "#chkApprove", function (e) { // 调用表单原生submit方法,确保Unobtrusive Ajax能捕获提交事件 $("#frmApprove").submit(); }); }); </script>
关键修正说明
- 缩小选择器范围:将
input[type='checkbox']改为#chkApprove,仅绑定目标复选框,避免影响页面其他复选框元素 - 替换提交触发方式:用
$("#frmApprove").submit()替代trigger('submit'),因为原生submit()方法会触发表单的标准提交事件,而ASP.NET Unobtrusive Ajax正是监听这个事件来处理异步提交流程
另外,当前使用的$(document).on('change', "#chkApprove", ...)事件委托方式,能保证局部视图被Ajax动态替换后,新加载的复选框依然能正常触发提交逻辑。
内容的提问来源于stack exchange,提问作者mz1378
相关产品推荐
相关产品推荐

