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

ASP.NET MVC中如何在外部JS文件中调用jQuery?

解决ASP.NET MVC中_Layout.cshtml里jQuery未定义的问题

问题根源

你遇到的$ is not defined错误,核心是脚本加载顺序和执行时机不匹配:

  • 布局页里的jquery.min.js加了defer属性,浏览器会先解析完整个DOM,再加载并执行jQuery
  • CustomFunction分部里的DTR.js没有加defer,浏览器解析到该脚本标签时会立即加载执行,此时jQuery还未加载完成,自然找不到$
  • ServerTimeClock里的servertimeclock.js加了defer,会和jQuery一起在DOM解析完成后按顺序执行(jQuery在前,所以能正常调用)

解决方案

方案1:给CustomFunction里的脚本加defer

这是最简单的修复方式,让DTR.js和jQuery同步延迟执行:

@section CustomFunction{
    <script src="~/js/DTR/DTR.js" defer asp-append-version="true"></script>
}

布局页里的jQuery在自定义脚本之前引入,浏览器会按顺序加载执行,jQuery先就绪后,DTR.js就能正常调用$。

方案2:调整jQuery的引入方式(去掉defer)

如果你的自定义脚本不需要延迟执行,可以把jQuery的defer去掉,确保它在所有自定义脚本之前加载完成:

<!-- 布局页里的JS引入部分修改 -->
<script src="~/lib/jquery/jquery.min.js" asp-append-version="true"></script>
<script src="~/lib/bootstrap/js/bootstrap.bundle.min.js" defer asp-append-version="true"></script>

注:Bootstrap 5的bundle版本不依赖jQuery,把jQuery放在Bootstrap前没问题;如果是Bootstrap 3,本来就要求jQuery先加载,这个顺序也符合要求。

方案3:统一脚本分部的渲染顺序

调整布局页里分部的渲染顺序,确保jQuery在所有依赖它的脚本之前加载完成:

<!-- 布局页里的自定义区域修改 -->
@await RenderSectionAsync("Scripts", required: false)
<!-- 先加载完jQuery,再渲染依赖它的分部 -->
@await RenderSectionAsync("CustomFunction", required: false)
@await RenderSectionAsync("ServerTimeClock", required: false)

额外注意点

  • 避免在视图里直接写依赖jQuery的内联脚本,除非能确保jQuery已加载完成;如果必须写,也要加上defer或放到依赖jQuery的分部里
  • 所有依赖库(比如jQuery)必须在使用它的自定义脚本之前引入

内容的提问来源于stack exchange,提问作者John Phillip Abello

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 20:23:14