Why does ResolveBundleUrl not work for custom folders? (MVC Beta 4)

只愿长相守 提交于 2019-12-18 03:11:39

问题


From a brand-new ASP.NET MVC 4 Beta Web Application, I'm re-arranging my folders to match Rob Conery's VidPub.Web example

Specifically, this means that the final directory structure for content looks like this

VidPub.Web
 |
 ---Public
    |
    |---Images
          |--- *.png 
    |---javascripts
          |--- *.js 
    |---stylesheets
         |----themes
              |---base  
                  |--- images
                  |--- *.css
        |----site.css

However, when I change the following lines in _Layout.cshtml

<link href="@System.Web.Optimization.BundleTable.Bundles.ResolveBundleUrl(
           "~/Content/css")" 
           rel="stylesheet" 
           type="text/css" />

<link href="@System.Web.Optimization.BundleTable.Bundles.ResolveBundleUrl(
           "~/Content/themes/base/css")" 
           rel="stylesheet" 
           type="text/css" />

<script src="@System.Web.Optimization.BundleTable.Bundles.ResolveBundleUrl(
             "~/Scripts/js")"></script>

to

<link href="@System.Web.Optimization.BundleTable.Bundles.ResolveBundleUrl(
           "~/Public/stylesheets/css")"
           rel="stylesheet" 
           type="text/css" />

<link href="@System.Web.Optimization.BundleTable.Bundles.ResolveBundleUrl(
           "~/Public/stylesheets/themes/base/css")" 
           rel="stylesheet" 
           type="text/css" />

<script src="@System.Web.Optimization.BundleTable.Bundles.ResolveBundleUrl(
           "~/Public/javascripts/js")"></script>

I end up with absolutely nothing in the resulting HTML.

<link rel="stylesheet" type="text/css" />
<link rel="stylesheet" type="text/css" />
<script></script>

Why isn't it picking up the files in their new locations?


回答1:


Under Application_Start in Global.asax.cs use BundleTable.Bundles.EnableDefaultBundles(); instead of BundleTable.Bundles.RegisterTemplateBundles();

If you look at the source for RegisterTemplateBundles you can see that it actually only looks for (and adds) specific js and css files. EnableDefaultBundleson the other hand does pretty much the same as when you add you own bundles.




回答2:


It appears you have to register your own bundle when using non-default directories. I added the following to Application_Start and it fixed the problem

var bundle = new Bundle("~/Public/stylesheets/css", new CssMinify());
bundle.AddDirectory("~/Public/stylesheets", "*.css", true);
BundleTable.Bundles.Add(bundle);

bundle = new Bundle("~/Public/javascripts/js", new JsMinify());
bundle.AddDirectory("~/Public/javascripts", "*.js", true);
BundleTable.Bundles.Add(bundle);


来源:https://stackoverflow.com/questions/9647585/why-does-resolvebundleurl-not-work-for-custom-folders-mvc-beta-4

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!