在哪里放置 @Scripts.Render 和 @Styles.Render
Posted
技术标签:
【中文标题】在哪里放置 @Scripts.Render 和 @Styles.Render【英文标题】:Where to place @Scripts.Render and @Styles.Render 【发布时间】:2017-11-04 15:45:37 【问题描述】:我很困惑@Scripts.Render 和@Styles.Render 的放置位置。理想情况下,我会将它们全部放在 head 部分中,但出乎意料的是,例如,@Scripts.Render("~/bundles/bootstrap") 根本不起作用,除非我将它放在 @RenderBody() 之后的 body 部分中。
@Mvc.RazorTools.BundleManager.Styles.Render() 和 @RenderSection("scripts", required: false) 的放置位置同样令人困惑。
非常感谢他们的最后一句话。
附言这个问题还有另一个类似的答案,但唯一的相似之处在于标题,因为问题在于丢失的文件,而不是位置。此外,该问题并未涉及脚本和样式。
为了完成而添加捆绑包:
bundles.Add(new ScriptBundle("~/bundles/bundlejquery").Include(
"~/Scripts/jquery-1.12.4.js",
"~/Scripts/jquery-ui-1.12.1.js",
"~/Scripts/jquery.validate.min.js",
"~/Scripts/jquery.validate.unobtrusive.min.js"));
bundles.Add(new ScriptBundle("~/bundles/bootstrap").Include(
"~/Scripts/bootstrap.js",
"~/Scripts/respond.js"));
【问题讨论】:
Not sure where to place Scripts.Render for JQuery的可能重复 【参考方案1】:首先,您可以将@Styles.Render 和@Scripts.Render 放在您放置脚本和样式标签的任何位置,所以放在标题中是完全可以的。可能还有其他问题,如果您提供更多信息,它可能会有所帮助。 您通常将 @RenderSection("scripts", required: false) 放在母版页中(就像默认的 _layout 文件一样)。然后就可以放
@section script
在您的页面上,您放置在此标记中的内容将在母版页上替换为 @RenderSection("scripts", required: false)。
注意:您不能将@section 放在部分页面上。
【讨论】:
【参考方案2】:我建议您将 @Styles.Render 放在页面的头部。这样做会让浏览器更快地呈现页面,因为它会在呈现页面之前等待所有 CSS 文件加载。
我还建议您将 @Scripts.Render 放在页面正文的结束标记之前。这样做将允许浏览器以完美的方式呈现 UI。请注意,无论何时执行脚本(Web 工作者和 Ajax 调用除外),UI 线程都会停止(这会在某些情况下导致脚本长时间运行)。
加法:
<head>
Render styles here
</head>
<body>
Render jQuery Scripts
Render Bootstrap Scripts
</body>
【讨论】:
这就解释了为什么 @Scripts.Render("~/bundles/bootstrap") 在我的头部无法正常工作。谢谢。 经过深入检查后发现 @Scripts.Render("~/bundles/bootstrap") 必须进入我的正文部分才能工作(根据您的回答),但是 ScriptBundle("~/ bundles/bundlejquery") 除非我把它放在头部,否则它不会起作用。所以我一直对关于脚本放置的清晰规则感到困惑。 @Luke,这是因为 bootstrap 依赖于 jQuery。这意味着您必须将我们的 jQuery 脚本放在引导脚本之前。它们可以放在页面底部。以上是关于在哪里放置 @Scripts.Render 和 @Styles.Render的主要内容,如果未能解决你的问题,请参考以下文章
我想用 Scripts.Render 使用 defer 并用 Styles.Render 预加载
什么是 MVC 6 中 @Scripts.Render 的替代品
Asp.Net MVC4 Bundling & Minification .min.js 文件从 Scripts.Render 中排除?
为啥 Asp.Net MVC 5 将 @Scripts.Render("~/bundles/jquery") 放在 _Layout.cshtml 的底部?