假设我们有一个场景,我们的应用程序不会使用 jqueryui,除了一个特定的编辑器模板。如果我想避免将 jqueryui 放在每个页面上(即我不想将它包含在我的 _Layout.cshtml 中默认加载的包中),我怎么能让编辑器模板包含 jqueryui.js和 jqueryui.css 文件的方式不会导致对这些文件的多次引用,并且会将引用放在标题中或正文的末尾而不是内联?
这是我在编辑器模板中尝试过的,但似乎不起作用:
@System.Web.Optimization.Scripts.Render("~/bundles/jqueryui")
@System.Web.Optimization.Styles.Render("~/Content/jqueryuistyles")
这添加了脚本和链接标签,但是每次使用编辑器模板时都会渲染标签一次,并且还会直接内联渲染它们,所以在我的例子中,这是在 jQuery 加载到正文底部之前。
@section Scripts{ <script src="@System.Web.Optimization.BundleTable.Bundles.ResolveBundleUrl("~/bundles/jqueryui")"></script> }
这与我在 _Layout.cshtml 中包含捆绑包的方式相匹配,但这显然不适用于编辑器模板。根本没有渲染任何东西,即使它渲染了,我认为它仍然会导致对 JavaScript 文件的多次引用(每次调用编辑器模板时 1 次)
似乎应该有一种方法可以让编辑器模板触发包含可以绑定(bind)到捆绑包或至少 @section 系统的 JavaScript 或 css 文件。有人知道怎么做吗?
最佳答案
实现此目的的一种方法可能是使用当前请求上下文请求所需的 javascript 文件。例如,在编辑器模板中,您可以编写类似这样的内容来请求 javascript 包含
HttpContext.Current.Items["Required.Script"] = "~/myeditortemplate.js";
然后在渲染任何可选脚本部分之前的布局中,您可以通过查看当前上下文来渲染所需的脚本
Scripts.Render(HttpContext.Current.Items["Required.Script"].ToString())
Scripts 在 MVC 中使用脚本包的地方。或者,您可以简单地将脚本标记点 src 发送到所需的脚本。
关于asp.net-mvc - 如何从编辑器模板添加 JavaScript 或 css 引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29955583/