Razor类库中JavaScript未执行问题排查求助
.NET Core MVC引用Razor类库后视图Scripts区块JS不执行的解决方法
问题场景
主Web应用(TestRCL,.NET Core MVC)已引用名为Books的Razor类库,且在Program.cs中配置了区域路由:
app.UseEndpoints(endpoints => { endpoints.MapAreaControllerRoute( name: "shop-default", areaName: "Books", pattern: "Books/{controller=Home}/{action=Index}/{id?}"); endpoints.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"); });
访问http://localhost/Books/Home/Index可正常加载视图,但视图中@section Scripts区块内的JavaScript代码未执行,视图代码如下:
<div class="container shadow p-5"> TEST </div> @section Scripts{ <script type="text/javascript"> console.log("Test") </script> }
问题原因
Razor视图中的@section区块内容需要布局页通过RenderSectionAsync(或RenderSection)调用才能被渲染到最终HTML中。如果主应用的布局页(或当前视图使用的布局)未定义对应Scripts区块的渲染逻辑,该区块的JS代码不会被输出到页面,自然无法执行。
解决方案
1. 确保布局页包含Scripts区块渲染代码
打开主应用的布局文件(通常是Views/Shared/_Layout.cshtml),在</body>标签前添加以下代码:
@await RenderSectionAsync("Scripts", required: false)
required: false表示允许视图不提供Scripts区块,若设为true则所有使用该布局的视图必须定义Scripts区块。- 如果你的视图指定了自定义布局(比如通过
Layout = "_CustomLayout";),需确保该自定义布局页也包含上述代码。
2. 检查视图是否取消了布局
如果视图中手动设置了Layout = null;,会完全禁用布局,此时@section区块会失效。解决方式:
- 移除
Layout = null;配置,使用默认或指定的布局页; - 若必须无布局,直接将JS代码写在视图的
<script>标签中,无需放在@section内。
内容的提问来源于stack exchange,提问作者pikk
相关产品推荐
相关产品推荐

