jam*_*uss 4 asp.net-mvc-4 bundling-and-minification
我的网站上有一些使用某些CSS和JS资源的页面 - 但它们是唯一使用该css或js文件的页面 - 因此我不想在每个页面中包含CSS和JS引用.不是修改每个View来引用它需要的CSS/JS,我想我可以在Controller中创建一个bundle并将它添加到已经注册的Bundles中,然后它将包含在bundle引用中,但是这不是似乎是可能的,或者我可能只是以错误的方式去做.
例如,在我的Controller for a registration页面中,我想我可以这样写:
Bundle styleBundle = new Bundle("~/bundles/registrationStyleBundle");
styleBundle.Include("~/Content/Themes/Default/registration.css");
BundleTable.Bundles.Add(styleBundle);
Run Code Online (Sandbox Code Playgroud)
然后在我的/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>
}
}
Run Code Online (Sandbox Code Playgroud)
但是这不起作用 - 唯一被渲染到我的页面的包最终是我在RegisterBundles(AppApper/BundleConfig.cs中)指定的那些包
知道如何实现这种"动态"或"运行时"捆绑吗?
编辑:按照Jasen的建议,我最终做的是从控制器中取出捆绑创建/注册代码,并将其添加到/App_Start/BundleConfig.cs中的RegisterBundles().这样,捆绑包已经可用并且内容被缩小.所以:
bundles.Add(
new StyleBundle("~/bundles/registrationStyleBundle")
.Include("~/Content/Themes/default/registration.css"));
Run Code Online (Sandbox Code Playgroud)
然后,在我看来,我补充说:
@section viewStyles{
<link href="@BundleTable.Bundles.ResolveBundleUrl("~/bundles/registrationStyleBundle")." rel="stylesheet" type="text/css" />
}
Run Code Online (Sandbox Code Playgroud)
然后,在/Views/Shared/_Layout.cshtml中,我添加了这个:
@RenderSection("viewStyles", required: false)
Run Code Online (Sandbox Code Playgroud)
使用@section Scripts { }块有条件地添加包.
_Layout.cshtml
<body>
...
@RenderSection("Scripts", required: false)
</body>
Run Code Online (Sandbox Code Playgroud)
FooView.cshtml
@section Scripts {
@Scripts.Render("~/bundles/foo")
}
Run Code Online (Sandbox Code Playgroud)
KungFooView.cshtml
@section Scripts {
@Scripts.Render("~/bundles/kungfoo")
}
Run Code Online (Sandbox Code Playgroud)
在我的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(...);
Run Code Online (Sandbox Code Playgroud)
现在,我可以定义多个布局文件,也可以选择性地向视图添加包.
| 归档时间: |
|
| 查看次数: |
7007 次 |
| 最近记录: |