mvc捆绑,每个视图一个

时间:2012-12-31 03:12:09

标签: asp.net-mvc asp.net-mvc-4 bundling-and-minification

我正在使用mvc4并探索如何捆绑css和javascript。我有一个问题,我需要帮助。

对于每个页面(视图)我渲染我想只有一个js和css文件。这是该视图所需的多个文件的高潮。从我所看到的,我可以创建文件包但我没有看到为每个视图创建一个包的方法。

如果有可能实现我所概述的内容,有人可以帮我解决这个问题吗?

2 个答案:

答案 0 :(得分:1)

更具体地说明你的问题。告诉我们你的尝试。您必须手动创建每个捆绑包。如果您希望在特定视图上使用捆绑包,请创建此类捆绑包并在视图中指定您将使用该捆绑包,就像您在视图中指定将在那里使用css文件一样。

答案 1 :(得分:1)

您需要做的是转到静态> App_Start> BundleConfig.cs:

Bundle Config path

然后为您拥有的每个视图创建一个包:

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>

我的意见

我真的不知道我们是否应该这样做。对我来说,我将在单独的包中的所有页面中使用的脚本分开,以便缓存它。然后为视图中使用的脚本创建另一个包。我想说的是我们应该在捆绑,缩小和缓存之间取得平衡。