我想将一个css名称加载到一个会话变量中,然后让它在_Layout.cshtml上加载一个css。
这是我试图做的事情:
var companycss = string.Format("~/Content/CompanyFiles/{0}/{0}.css", MySession.CssName);
bundles.Add(new StyleBundle("~/Content/css").Include(
"~/Content/bootstrap.css",
"~/Content/site.css",
"~/Content/justified-nav.css",
"~/Content/Styles.css",
companycss)); // <-- Custom CSS file
BundleConfig.cs显然在我的HomeController中的index方法之前加载,所以它没有加载这个样式表。
在我的Index方法中,我正在加载MySession.CssName并希望它能正确加载到页面中,因为我决定在客户访问网站时加载哪个css。
有关如何完成此任务的任何建议?
谢谢!
答案 0 :(得分:0)
除非你为每家公司创建一个静态捆绑包,否则在这里实现你想要的东西几乎是不可能的。换句话说,您不能依赖BundleConfig.cs中的会话,但可以通过会话变量引用布局中的其他包。该捆绑包必须已经定义。
或者,如果您不介意加载两个包,则可以在视图中动态创建一个包。您基本上只是让您的~/Content/css
捆绑包括除公司CSS文件之外的所有CSS。然后你可以做类似的事情:
@{ BundleTable.Bundles.Add(new StyleBundle(String.Format("~/bundles/{0}", MySession.CssName)).Include(String.Format("~/Content/CompanyFiles/{0}/{0}.css", MySession.CssName))); }
@Styles.Render(String.Format("~/bundles/{0}", MySession.CssName))
这将为此特定公司的CSS添加新捆绑包,然后加载它。你最终会加载两个样式表而不是一个,但它们都会被缩小。
修改强>
我之前从未考虑过这个问题,但您可以将BundleConfig.cs中的代码与后一个选项相结合,并实现单个捆绑。但是,您实际上已将代码从BundleConfig.cs
转移到您的布局中。有些人可能认为这是一种失礼,它肯定会践踏MVC模式的原则。不过,为了完整性:
@{
var companycss = string.Format("~/Content/CompanyFiles/{0}/{0}.css", MySession.CssName);
BundleTable.Bundles.Add(new StyleBundle("~/Content/css").Include(
"~/Content/bootstrap.css",
"~/Content/site.css",
"~/Content/justified-nav.css",
"~/Content/Styles.css",
companycss)); // <-- Custom CSS file
}
@Styles.Render("~/Content/css")