2012-10-23 4 views
0

MVC4 StyleBundle을 사용하여 여러 개의 CSS를 묶었습니다. IE 9 이하에서만 필요한 CSS가 하나 있습니다.브라우저 버전에 따라 특정 CSS를 묶는 방법은 무엇입니까?

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 방법의 내 BundleConfig 클래스에서

, 나는있다. RegisterBundles 방법 중에 브라우저를 감지 할 수 있습니까?

+1

Global.asax에서이 번들을 만들고 있습니까? 그것이 바로이 오류의 원인입니다. 번들은 요청 기반 번들을 지원하지 않지만 글로벌 번들은 지원하지 않는다고 생각합니다. – Tejs

+0

@Tejs,'Application_Start'에서 호출되고 있습니다. –

+2

그래, 프레임 워크가 변형 기반 번들을 제공한다고 생각하지 않는다. 그것은 전부 또는 전 세계적인 것입니다. 브라우저마다 다양한 번들을 만들고 싶다면, 모든 별개의 번들을 만들고 각각의 뷰에 원하는 번들에 대한 참조를 작성해야합니다. – Tejs

답변

1

예 Tejs가 정확합니다. 번들은 전역이며 처음 참조 된 후 서버에 캐시되므로 요청에 따라 다를 수 없습니다. 따라서 위에서 뭘했는지에 대한 문제는 브라우저가 요청을 먼저 실행하면 캐시를 채우고 모든 후속 요청이 IE9 여부와 상관없이 무엇을 수신할지 결정합니다. 나는 도서관 Zepto를 사용하여이 예에서

<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> 

하고, JQuery와 인터넷 익스플로러를의 경우 :

3

당신이 뭔가를 추가 할 수 있습니다. 그것은 나를 위해 잘 작동합니다. Pierre