2013-06-13 104 views
4

我正在處理ASP.NET MVC4。客戶需要加載其他域名(如CDN)的所有javascript和css。我已經使用了System.Web.Optimization。CDN路徑不工作在js捆綁在MVC

下面

是代碼。

var bundle = new ScriptBundle("~/bundles/scripts/"); 
bundle.Orderer = new AsIsBundleOrderer(); 
bundle.EnableFileExtensionReplacements = false; 
bundle.CdnPath = "http://js.cusomdomainname.com"; 
bundle.Include("~/Scripts/jquery-1.7.1.min.js", 
       "~/Scripts/jquery.unobtrusive-ajax.min.js", 
       "~/Scripts/jquery.validate.min.js", 
       "~/Scripts/jquery.validate.unobtrusive.min.js"); 

BundleTable.Bundles.UseCdn = true; 
BundleTable.EnableOptimizations = true; 
BundleTable.Bundles.Add(bundle); 
BundleTable.Bundles.IgnoreList.Clear(); 

上查看

@Scripts.Render("~/bundles/scripts/") 

,但它不是從另一個域渲染。

可能是什麼問題?

+0

這裏是類似question..answered 問題http://stackoverflow.com/questions/15434692/javascript-error-in-asp -net-mvc-4-bundling –

回答

5

這個例子展示瞭如何在'release'模式下從CDN加載資源,在本地從'debug'模式加載資源。

var jqueryCdnPath = "//ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"; 
var jqueryBundle = new ScriptBundle("~/bundles/jqueryCdn", jqueryCdnPath) 
         .Include("~/Scripts/jquery-{version}.js"); 

BundleTable.Bundles.Add(jqueryBundle); 

CdnPath是指你想從CDN來獲取資源,並Include告訴在哪裏可以在本地找到。您可以更改從Web.config請求哪一個。設置<compilation debug="true"/>使用本地文件,<compilation debug="false"/>使用CDN。

看到這Bundling and Minification文章的更多信息。

+0

與您的解決方案它對於jquery加載多個很有用,但也可以使用cdn加載多個css,那麼cdn怎麼可能有關於此的任何想法,請讓我知道我需要。 – coderwill

1

我不在乎cdnPath的東西在捆綁中的工作方式,因爲您只能爲整個捆綁包指定單個文件路徑。如果你想建立一個簡單的原點式CDN它更容易做到以下幾點:

@Scripts.RenderFormat(
    "<script src='http://js.cusomdomainname.com{0}'></script>", 
    "~/bundles/scripts/") 

,如果你有很多不同的文件包的優化是否被啓用這將工作。

這也得到與周圍的查詢參數描述here

+0

完全同意你的看法。捆綁「幾乎成功」。如果您只需添加CDN路徑並且捆綁器會從指定路徑加載包含的腳本,那麼完美無缺。 – WoofWoof88