Asp.net mvc 4 ASP.NET MVC 4-从控制器添加捆绑包?

Asp.net mvc 4 ASP.NET MVC 4-从控制器添加捆绑包?,asp.net-mvc-4,bundling-and-minification,Asp.net Mvc 4,Bundling And Minification,我在我的网站上有一些使用特定CSS和JS资源的页面,但它们是唯一使用CSS或JS文件的页面,所以我不想在每个页面中都包含CSS和JS引用。与其修改每个视图来引用它需要的CSS/JS,我想我可以在控制器中创建一个bundle,并将其添加到已经注册的bundle中,然后它将包含在bundle引用中,但这似乎是不可能的,或者我只是走错了方向 例如,在注册页面的控制器中,我想我可以这样写: Bundle styleBundle = new Bundle("~/bundles/registrationSt

我在我的网站上有一些使用特定CSS和JS资源的页面,但它们是唯一使用CSS或JS文件的页面,所以我不想在每个页面中都包含CSS和JS引用。与其修改每个视图来引用它需要的CSS/JS,我想我可以在控制器中创建一个bundle,并将其添加到已经注册的bundle中,然后它将包含在bundle引用中,但这似乎是不可能的,或者我只是走错了方向

例如,在注册页面的控制器中,我想我可以这样写:

Bundle styleBundle = new Bundle("~/bundles/registrationStyleBundle");
styleBundle.Include("~/Content/Themes/Default/registration.css");
BundleTable.Bundles.Add(styleBundle);
然后在my/Views/Shared/_Layout.cshtml中显示:

@foreach(Bundle b in BundleTable.Bundles)
 {
     if (b is StyleBundle)
     {
            <link href="@BundleTable.Bundles.ResolveBundleUrl(b.Path)" rel="stylesheet" type="text/css" />
     }
     else if (b is ScriptBundle)
     {
            <script src="@BundleTable.Bundles.ResolveBundleUrl(b.Path)" type="text/javascript"></script>
     }
 }
然后,在我看来,我添加了以下内容:

@section viewStyles{
    <link href="@BundleTable.Bundles.ResolveBundleUrl("~/bundles/registrationStyleBundle")." rel="stylesheet" type="text/css" />
}
@RenderSection("viewStyles", required: false)

使用
@section Scripts{}
块有条件地添加捆绑包

\u Layout.cshtml

<body>
    ...
@RenderSection("Scripts", required: false)
</body>
@section Scripts {
    @Scripts.Render("~/bundles/foo")
}
@section Scripts {
    @Scripts.Render("~/bundles/kungfoo")
}
KungFooView.cshtml

<body>
    ...
@RenderSection("Scripts", required: false)
</body>
@section Scripts {
    @Scripts.Render("~/bundles/foo")
}
@section Scripts {
    @Scripts.Render("~/bundles/kungfoo")
}
在BundleConfig中,我通常对资源进行分组

bundles.Add(new ScriptBundle("~/bundles/Areas/Admin/js").Include(...);
bundles.Add(new StyleBundle("~/bundles/Areas/Admin/css").Include(...);
bundles.Add(new ScriptBundle("~/bundles/Areas/Home/js").Include(...);
bundles.Add(new StyleBundle("~/bundles/Areas/Home/css").Include(...);

现在,我可以定义多个布局文件,也可以有选择地向视图中添加捆绑包。

虽然这样做有效(我刚刚尝试过)-它需要在每个view/.cshtml页面上添加一个@section-我希望能够避免这种情况,并使用捆绑包来定义控制器中所需的资源,以利用捆绑包提供的缩小功能。如果您在创建视图之前动态构建捆绑包,那么这种方式就无法实现捆绑和缩小的目的提供。您丢失了绑定资源上的浏览器缓存。您的绑定更改的频率如何?您的包在运行时会发生变化吗?您是否有足够的排列,以至于在设计视图时无法定义捆绑包?嗯,不,我知道每个视图提前需要哪些css和js文件。我现在正在处理这个问题,我只是想弄清楚如何让包缩小CSS文件的内容。如果我能做到这一点,这个解决方案将是可用的。我尝试在我的视图中与控制器代码结合使用,但由于某些原因,结果并没有缩小@节样式{}