我正在使用mvc4并探索如何捆绑css和javascript。我有一个问题,我需要帮助。
对于每个页面(视图)我渲染我想只有一个js和css文件。这是该视图所需的多个文件的高潮。从我所看到的,我可以创建文件包但我没有看到为每个视图创建一个包的方法。
如果有可能实现我所概述的内容,有人可以帮我解决这个问题吗?
答案 0 :(得分:1)
更具体地说明你的问题。告诉我们你的尝试。您必须手动创建每个捆绑包。如果您希望在特定视图上使用捆绑包,请创建此类捆绑包并在视图中指定您将使用该捆绑包,就像您在视图中指定将在那里使用css文件一样。
答案 1 :(得分:1)
您需要做的是转到静态> App_Start> BundleConfig.cs:
然后为您拥有的每个视图创建一个包:
public class BundleConfig
{
// For more information on Bundling, visit http://go.microsoft.com/fwlink/?LinkId=254725
public static void RegisterBundles(BundleCollection bundles)
{
bundles.Add(new ScriptBundle("~/bundles/GlobalScripts")
.Include("~/Static/Scripts/jquery-1.10.2.js"
, "~/Static/Scripts/json2.js"
, "~/Static/Scripts/jquery-ui-1.10.4.js"
//, "~/Static/Scripts/jquery.layout-1.3.0.js"
//, "~/Static/Scripts/jquery.layout.state.js"
, "~/Static/Scripts/helper.mainlayout.js"));
}
}
只需在.Include()
中为视图中的每个javascript添加脚本路径,并为您拥有的每个视图继续bundles.add(new ScriptBundle(<bundle path>))
。
您将使用CSS捆绑包执行类似的步骤,但不会使用ScripBundle
,而是使用StyleBundle
为了减少代码的重复,尝试为每个相互依赖的javascripts创建一个字符串列表并对它们进行联合:
List<string> jqGridScripts = new List<string>
{"~/Static/Scripts/jquery.jqGrid.src.js"
, "~/Static/Scripts/i18n/grid.locale-en.js"
, "~/Static/Scripts/helper.jqgrid.js"};
List<string> jqStopwatch = new List<string>
{ "~/Static/Scripts/jquery.stopwatch.js" };
bundles.Add(new ScriptBundle("~/bundles/viewName")
.Include(jqGridScripts
.Union(jqStopwatch).ToArray()));
请记住,它们在数组中出现的顺序与它们在HTML上显示的顺序相同,或者捆绑和缩小。
视图中的代码:
@section scripts{
@Scripts.Render("~/bundles/viewName");
}
HTML中的结果代码
<script src="/WDCSS/bundles/viewName?v=T3IlBuvfGTiz62pwDuiPogFX1jQoxVC2tmp3K6wffBQ1"></script>
我的意见
我真的不知道我们是否应该这样做。对我来说,我将在单独的包中的所有页面中使用的脚本分开,以便缓存它。然后为视图中使用的脚本创建另一个包。我想说的是我们应该在捆绑,缩小和缓存之间取得平衡。