2014-01-08 41 views
6

MVC是否有內置的方式來指定樣式表的CDN後備?我正在嘗試爲jQuery Mobile Structure樣式表設置回退。 這是我在RegisterBundles方法代碼:風格包的MVC CDN後備

var JQMstyleSheet = new StyleBundle("~/JQMstyle", "http://code.jquery.com/mobile/1.3.1/jquery.mobile.structure-1.3.1.min.css").Include("~/theme/jquery.mobile.structure-1.3.1.css"); 
JQMstyleSheet.CdnFallbackExpression = "window.jQuery.mobile"; 
bundles.Add(JQMstyleSheet); 

當頁面呈現它這個輸出到HTML:

<script> 
(window.jQuery.mobile)||document.write('<script src="/JQMstyle"><\/script>'); 
</script> 

當CDN失敗,則不動態地添加樣式表喜歡它完美地爲我的JavaScript文件。 我認爲問題在於它試圖渲染一個腳本,當它應該是一種風格。除CdnFallbackExpression之外是否有不同的後備特性?

UPDATE

System.Web.Optimization.StyleBundle微軟的文檔顯示CdnFallbackExpression作爲一個可用的屬性,但它說的說明「獲取由Scripts輔助類提供的腳本擴展......」 http://msdn.microsoft.com/en-us/library/system.web.optimization.stylebundle(v=vs.110).aspx 這是一個錯誤在System.Web.Optimization.StyleBundle?應該通過引用Styles輔助類來避免該屬性?

+0

'JQMstyleSheet.CdnFallbackExpression =「window.jQuery.mobile」;'你爲什麼要這樣做? – Amila

+0

如果cdn失敗,我需要加載樣式表。檢查window.jQuery.mobile會告訴我,如果cdn下載jquery mobile失敗,那麼我知道樣式表cdn下載最有可能失敗。我不確定如何檢查是否存在使用CdnFallbackExpression的樣式表。 – Adrian

回答

10

TLDR;

查看我的解決方案,它提供了一個StyleBundle擴展方法來解決問題。

Style Bundle Fallback

此外

是的,有在Microsoft ASP.NET優化框架中的錯誤,記錄here

解決方法是將CdnFallbackExpression修改爲javascript函數,該函數既檢查樣式表並加載回退,從而忽略優化框架中的壞腳本。

有幾個棘手的部分,特別是當它來自另一個域時,像大多數CDN源一樣檢查樣式表是否被加載。

我在GitHub上有一個解決方案,您可以使用,直到問題在框架中得到解決;不過,我仍然留意確定何時樣式表實際加載的棘手部分。