样式捆绑(Bundling)未渲染样式的问题求助
我之前也碰到过完全一样的问题,下面给你几个按优先级排序的排查步骤,一步步来应该能定位到问题:
先检查Bundle的文件路径是否正确
先逐个验证Bundle里包含的每个CSS文件是否能正常访问:比如在浏览器地址栏输入~/Content/components/bootstrap/dist/css/bootstrap.min.css(替换成你的域名前缀),看看能不能打开正确的CSS内容。如果有任何一个文件返回404,那整个Bundle都会失效,因为Bundle会忽略不存在的文件,最终输出空内容。特别注意路径的大小写,IIS在某些环境下对大小写是敏感的。确认Bundle配置的顺序
你设置BundleTable.EnableOptimizations = true;的位置应该在所有bundles.Add()之后,正确的顺序应该是:// 先添加所有Bundle bundles.Add(new StyleBundle("~/css/master/supplierbundle").Include( "~/Content/components/bootstrap/dist/css/bootstrap.min.css", "~/Content/components/jquery-ui/themes/smoothness/jquery-ui.css", "~/css/mystyles.css")); // 最后启用优化 BundleTable.EnableOptimizations = true;如果先启用优化再添加Bundle,可能会导致Bundle无法正确注册。
检查Web.config的编译设置
打开Web.config,找到<compilation>节点:<compilation debug="true" targetFramework="4.x" />当
debug="true"时,即使你设置了EnableOptimizations=true,ASP.NET有时候会跳过Bundle的合并压缩逻辑(或者加载单个文件而非合并后的)。可以尝试把debug改成false测试,或者在Web.config里添加Bundle的配置强制启用优化:<appSettings> <add key="BundleTable.EnableOptimizations" value="true" /> </appSettings>这样不管debug模式是什么,都会启用Bundle优化。
用浏览器开发者工具抓包分析
打开浏览器F12,切换到Network标签,刷新页面:- 找到
/css/master/supplierbundle的请求,查看它的状态码:如果是404,说明Bundle的虚拟路由没有被正确映射;如果是200,查看Response内容,看看是不是空的或者只有部分CSS内容。 - 如果Response是空的,说明Bundle里的文件没有被正确加载,回到第一步检查文件路径。
- 找到
清除浏览器缓存
有时候浏览器会缓存旧的(甚至是空的)Bundle内容,尤其是启用优化后缓存时间更长。可以用Ctrl+Shift+R强制刷新页面,或者直接清除浏览器缓存后再测试。验证@Styles.Render的位置
确保@Styles.Render("~/css/master/supplierbundle")放在页面的<head>标签内,而且没有被其他HTML元素或者JavaScript代码覆盖、删除。可以查看页面最终的HTML源码,确认这个<link>标签确实存在,并且没有被修改href属性。
内容的提问来源于stack exchange,提问作者nickornotto

