Rob*_*ous 4 asp.net-mvc asp.net-mvc-3 asp.net-mvc-4
我有一个多租户应用程序,我试图确定最简单的方法来控制哪些CSS文件捆绑基于任何传入请求的URL.
我认为我可以在RegisterBundles()中有一些条件逻辑,它将Url作为字符串,并相应地捆绑:
public static void RegisterBundles(BundleCollection bundles, string tenant = null) {
if (tenant == "contoso"){
bundles.Add(new StyleBundle("~/contoso.css")
}
}
Run Code Online (Sandbox Code Playgroud)
但我不知道如何将字符串传递给RegisterBundles,即使它是可能的,也不是正确的解决方案.这里的任何帮助都会很棒.
现在无法在RegisterBundles中执行此操作.动态生成每个请求的bundle内容将阻止ASP.net缓存缩小的CSS(它在HttpContext.Cache中缓存).
您可以做的是在RegisterBundles中为每个租户创建一个捆绑包,然后在视图中选择适当的捆绑包.
视图中的示例代码:
@Styles.Render("~/Content/" + ViewBag.TenantName)
Run Code Online (Sandbox Code Playgroud)
编辑:
正如您所说,在ViewBag中设置TenantName是有问题的,因为您必须为每个视图执行此操作.解决此问题的一种方法是创建一个静态函数,如Styles.Render(),它根据当前租户选择正确的包名称.
public static class TenantStyles
{
public static IHtmlString Render(params string[] paths)
{
var tenantName = "test"; //get tenant name from where its currently stored
var tenantExtension = "-" + tenantName;
return Styles.Render(paths.Select(i => i + tenantExtension).ToArray());
}
}
Run Code Online (Sandbox Code Playgroud)
用法
@TenantStyles.Render("~/Content/css")
Run Code Online (Sandbox Code Playgroud)
捆绑名称需要采用此格式{bundle} - {tenant},如〜/ Content/css-test.但是你可以改变课程的格式.
| 归档时间: |
|
| 查看次数: |
1857 次 |
| 最近记录: |