为管理员用户角色呈现非捆绑资产

时间:2014-08-01 00:01:10

标签: c# asp.net asp.net-mvc bundle bundling-and-minification

我是否有可能为"管理员"中的用户呈现非捆绑和无限制的脚本和样式。作用

我已经搜索并找到了如何禁用捆绑

BundleTable.EnableOptimizations = ...

和缩小

foreach (Bundle bundle in bundles)
{
    bundle.Transforms.Clear();
}

在Global.asax.cs Application_Start中,但我希望这个逻辑是按用户而不是每个应用实例,因此它不应该只在应用程序启动时运行。

2 个答案:

答案 0 :(得分:4)

首先,BundleConfig中包含的样式或脚本都不会被加载,除非它通过调用Scripts.Render()或Styles.Render()方法包含在视图中。默认情况下,这些方法是从_Layout.schtml页面(Views / Shared)调用的。

@Styles.Render("~/Content/css")
@Scripts.Render("~/bundles/modernizr")
@Scripts.Render("~/bundles/jquery")
@Scripts.Render("~/bundles/bootstrap")

为管理区域创建不同的布局页面并加载所需的脚本和样式将是更好的选择。

也可以使用相同的方法Scripts.Render()从任何.cshtml文件(视图)加载这些文件。在这种情况下,它会像,

@{
    if (User.IsInRole("Admin"))
    {
        //Update this portion with path of required bundles
        @Scripts.Render("~/bundles/jquery")
    }
    else
    {
        //Update this portion with path of required bundles
        @Scripts.Render("~/bundles/jquery")
        @Scripts.Render("~/bundles/jqueryval")
    }
}

上述代码段可以在_Layout页面或任何其他页面中添加。

如果要求是添加任何非捆绑代码。只需使用脚本标记即可。看起来像这样:

@{
    if (User.IsInRole("Admin"))
    {
        //required script or style files
    }
    else
    {
        //To include unbundled and unminified scripts
        <script type="text/javascript" src="~/Scripts/jquery.validate.js"></script>
    }
}

答案 1 :(得分:3)

我实施的emodendroket的建议,目前对我有用:

public class FilterConfig
{
    public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
        filters.Add(new DisableBundlingForAdminFilter());
        // other filters
    }

    private class DisableBundlingForAdminFilter : ActionFilterAttribute
    {
        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            #if !DEBUG
            BundleTable.EnableOptimizations = !filterContext.HttpContext.User.IsInRole("Admin");
            #endif
        }
    }
}
FilterConfig.RegisterGlobalFilters中调用

Application_Start