You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET Core中局部视图的jQuery脚本无法运行,如何修复?

问题修正方案

你的代码存在两个核心问题,导致复选框状态变化时无法自动触发表单提交:

  1. 选择器范围过广,绑定了所有复选框的change事件,易引发冲突或误触发
  2. 直接使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 05:10:25