基于查询字符串的Mvc捆绑

时间:2017-11-29 17:25:59

标签: asp.net-mvc asp.net-mvc-4 bundling-and-minification

我遇到了一个MVC捆绑应该基于Query字符串值发生的场景。

我正在使用文件夹捆绑文件夹中的所有* .js。我的查询字符串将具有基于该名称的子文件夹名称,我只需要在该文件夹中捆绑js文件。因此,即使我们在运行时添加任何文件夹并在URL中提供该应用程序,该应用程序也应该能够在该文件夹中加载js文件。基本上我正在寻找什么来读取bundle.config中的查询字符串,并使包动态的文件夹名称

正在寻找的是

 bundles.Add(new ScriptBundle("~/bundles/folderbundle")
     .IncludeDirectory("~/JS/"+ [FoldernamefromQueryString] +", "*.js", true)
);

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

经过几个小时的搜索,我得到了一些我正在寻找的东西,你必须更改Global.asax中的代码

  public class MvcApplication : System.Web.HttpApplication
    {
        protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            //BundleConfig.RegisterBundles(BundleTable.Bundles);
            BundleTable.EnableOptimizations = true;
        }

        protected void Application_AcquireRequestState(object sender, EventArgs e)
        {
            var handler = Context.Handler as MvcHandler;
            if (handler != null)
            {
                var routeData = handler.RequestContext.RouteData;
                var moduleName = !string.IsNullOrWhiteSpace(HttpContext.Current.Request.QueryString["ModuleName"]) ? HttpContext.Current.Request.QueryString["ModuleName"] : "Module";
                BundleConfig.RegisterBundles(BundleTable.Bundles, moduleName);
            }
        }
    }

并在bundle.config

namespace RouteBundling
{
    public class BundleConfig
    {
        // For more information on bundling, visit http://go.microsoft.com/fwlink/?LinkId=301862
        public static void RegisterBundles(BundleCollection bundles, string moduleName = "")
        {
            if (moduleName == "Module")
            {
                bundles.Add(new ScriptBundle("~/bundles/module").IncludeDirectory("~/Scripts/Module/", "*.js", true));
            }
            else
            {
                bundles.Add(new ScriptBundle("~/bundles/module").IncludeDirectory("~/Scripts/Module/" + moduleName + "/", "*.js", true));
            }
        }
    }
}

这对我来说几乎完成了这项工作。谢谢