我更新了自定义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文件在页面中呈现。已经检查过,当控制器运行时,它们肯定会被添加到捆绑包中,但是没有被渲染到页面中。
有什么想法吗?
编辑:在视图中插入了一个断点,当视图渲染时,新的包没有被其他部分拉入。不知道为什么。
答案 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
希望这对其他人有用。