2012-10-23 41 views
0

我使用MVC4 StyleBundle捆綁了一堆CSS。有一個CSS只需要IE 9或更低版本。如何根據瀏覽器版本捆綁特定的CSS?

在我BundleConfigRegisterBundles方法,我有:

if (HttpContext.Current.Request.Browser.Browser.Trim().ToUpperInvariant().Equals("IE") && HttpContext.Current.Request.Browser.MajorVersion <= 9) 
    cssBundle.Include("~/Content/ie.css"); 

但後來我得到了Request is not available in this context錯誤。 RegisterBundles方法期間無法檢測瀏覽器嗎?

+1

您是否在Global.asax中創建了這些包?那是什麼會導致這個錯誤。我不認爲Bundles支持基於請求的捆綁包,而是支持全局捆綁。 – Tejs

+0

@Tejs,它在'Application_Start'處被調用。 –

+2

是的,我不相信該框架提供了基於變體的包;這是一個全球性的或沒有的。如果你想爲每個瀏覽器創建不同的bundle,你需要製作所有獨立的bundle,然後在每個視圖中寫入你想要的bundle的引用。 – Tejs

回答

1

是的Tejs是正確的。 Bundle是全局的,不能根據請求而變化,因爲它們在被首次引用後緩存在服務器上。因此,上面的問題是,根據瀏覽器首先觸發請求的情況,這將填充緩存並確定所有後續請求將接收的內容,而不管它們是否爲IE9。

3

您可以添加類似:

<script type="text/javascript"> 
    var domLib = '@System.Web.Optimization.BundleTable.Bundles.ResolveBundleUrl("~/Zepto")'; 
    if (navigator.userAgent.indexOf('MSIE ') > -1) { 
     domLib = '@System.Web.Optimization.BundleTable.Bundles.ResolveBundleUrl("~/Jquery")'; 
    } 
    document.write('<script src="' + domLib + '"><\/script>'); 
</script> 

在這個例子中,我使用圖書館的Zepto和jQuery,如果是IE瀏覽器。這對我來說可以。 Pierre

相關問題