加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc-4 – ASP.NET MVC 4 – 从Controller添加Bundle?

发布时间:2020-12-16 06:48:59 所属栏目:asp.Net 来源:网络整理
导读:我的网站上有一些使用某些CSS和JS资源的页面 – 但它们是唯一使用该css或js文件的页面 – 因此我不想在每个页面中包含CSS和JS引用.不是修改每个View来引用它需要的CSS / JS,我想我可以在Controller中创建一个bundle并将它添加到已经注册的Bundles中,然后它将
我的网站上有一些使用某些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);

然后在我的/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>
     }
 }

但这不起作用 – 唯一被渲染到我的页面的包最终是我在RegisterBundles中指定的那些(在/App_Start/BundleConfig.cs中)

知道如何实现这种“动态”或“运行时”捆绑吗?

编辑:根据Jasen的建议,我最终做的是将捆绑创建/注册代码从控制器中取出并将其添加到/App_Start/BundleConfig.cs中的RegisterBundles().这样,捆绑包已经可用并且内容被缩小.所以:

bundles.Add(
new StyleBundle("~/bundles/registrationStyleBundle")
.Include("~/Content/Themes/default/registration.css"));

然后,在我看来,我补充说:

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

然后,在/Views/Shared/_Layout.cshtml中,我添加了这个:

@RenderSection("viewStyles",required: false)

解决方法

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

_Layout.cshtml

<body>
    ...
@RenderSection("Scripts",required: false)
</body>

FooView.cshtml

@section Scripts {
    @Scripts.Render("~/bundles/foo")
}

KungFooView.cshtml

@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(...);

现在,我可以定义多个布局文件,也可以选择性地向视图添加包.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读