从控制器

时间:2016-02-19 12:09:05

标签: asp.net-mvc

我更新了自定义CMS,以便能够支持具有不同外观的多个网站。我希望能够将依赖于皮肤的css文件存储在数据库中,然后在CMS确定正在加载哪个站点后将它们加载到一个包中。这就是我到目前为止所做的:

控制器:

    public void loadResources(int portal_ID)
    {
        List<Portal_Res> res = cms.Portal_Resources.Where(r => r.portal_id == portal_ID).ToList<Portal_Res>();

        BundleCollection portal_bundles = new BundleCollection();

        List<Portal_Res> dsk_css = res.Where(r => r.type == "Desktop CSS").ToList<Portal_Res>();

        StyleBundle bdl_dsk_css = new StyleBundle("~/Content/prtl_dsk_css");

        if (dsk_css.Count > 0)
        {
            foreach (Portal_Res r in dsk_css)
            {
                bdl_dsk_css.Include(r.path);
            }
        }

        portal_bundles.Add(bdl_dsk_css);

        BundleConfig.RegisterBundles(portal_bundles);
    }

查看:

@Styles.Render("~/Content/prtl_dsk_css")

渲染结果:

<link href="/Content/prtl_dsk_css" rel="stylesheet"/>

没有添加到包中的css文件在页面中呈现。已经检查过,当控制器运行时,它们肯定会被添加到捆绑包中,但是没有被渲染到页面中。

有什么想法吗?

编辑:在视图中插入了一个断点,当视图渲染时,新的包没有被其他部分拉入。不知道为什么。

1 个答案:

答案 0 :(得分:0)

找到解决方案:

    public void loadResources(int portal_ID)
    {
        List<Portal_Res> res = cms.Portal_Resources.Where(r => r.portal_id == portal_ID).ToList<Portal_Res>();

        List<Portal_Res> dsk_css = res.Where(r => r.type == "Desktop CSS").ToList<Portal_Res>();

        StyleBundle bdl_dsk_css = new StyleBundle("~/Content/prtl_dsk_css");

        if (dsk_css.Count > 0)
        {
            foreach (Portal_Res r in dsk_css)
            {
                bdl_dsk_css.Include(r.path);
            }
        }

        BundleTable.Bundles.Add(bdl_dsk_css);

        BundleConfig.RegisterBundles(BundleTable.Bundles);
    }

必须使用BundleTable而不是新的BundleCollection

希望这对其他人有用。