服务器上的IIS 7中CSS无法正常工作,就像在本地一样。

3
当我在Visual Studio 2012上调试ASP MCV 4应用程序时,CSS正确显示。我将其部署到IIS 7,但我注意到并不是所有CSS都像本地一样工作,有些样式丢失了。我已编辑了呈现字符串,使其与我的实际目录结构不相似,如这里所说,但我没有得到好的结果。有什么想法如何处理这个问题?
更新:
为了发布我的应用程序:
- 我使用了“发布”按钮(在VS 2012中) - 选择文件系统(发布方法) - 从IIS管理器中浏览该应用程序
当点击F12时,我收到以下消息:“无法加载资源:服务器以404(未找到)的状态响应”这是关于找不到某些图像的问题。
我正在使用包含CSS文件的bundles。

确定哪些CSS已经加载,哪些没有加载,然后从那里检查你链接的路径 - 这是一个开始的地方。 - sheriffderek
1
如果您在IIS中没有获取到CSS,请检查控制面板中的“程序和功能”小程序,确保在IIS设置中安装了静态内容。这在IIS 8上曾经让我困扰过。 - Slicksim
你能否通过解释你进行调试的步骤和得到的结果来改进你的问题?你是否尝试过使用Firebug或类似的工具(在Chrome / Firefox中按CTRL + ALT + I,在IE中按F12)?CSS文件是否正确地从服务器下载?你是如何包含CSS文件的?你使用捆绑还是什么? - winterlude
@winterlude,你看到我的更新了吗?我有提到你需要知道的内容吗? - ItShine
@Slicksim 我已经检查了静态内容,它已经安装并且已经检查过了。 - ItShine
5个回答

2

尝试

BundleTable.EnableOptimizations = false;

在捆绑配置中

0

我通过在webconfig中注释静态文件处理程序来解决了我的问题。

  <add name="BlockViewHandler" path="*" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" />

0

只需在请求筛选功能中删除App_Themes文件夹即可。

IIS7 -> Site -> (Ursitename),在右侧面板中有"请求筛选"

打开该功能并从中删除App_Themes文件夹。然后刷新并浏览。

这不是IIS的问题。

  1. 检查CSS是否在两个服务器上相同(可能您没有正确部署CSS文件)。
  2. 检查它是否不是缓存问题(清除所有浏览器缓存)。
  3. 在另一个浏览器中检查。

IE有开发人员工具(F12)。检查该标题在两个版本中是否具有相同的css样式...

还要通过提供正确的路径进行检查,

由于问题仅出现在CSS上,您是否使用完整的CSS路径?

<link href="http://pcname/website/file.css" rel="Stylesheet" type="text/css" />

使用这个

<link href="file.css" rel="Stylesheet" type="text/css" />

如果不是这个问题,那么可能是权限问题。当你浏览本地的 http://local 时,它会使用你的本地账户,而当你浏览 http://pcname 时,你将被识别为远程用户,可能没有访问 CSS 文件或文件夹的权限。

谢谢您的回复,您能告诉我在哪里可以找到App_Themes吗?因为它在我的应用程序中不存在。 - ItShine
@ItShine:实际上,静态使用CSS意味着它将根据主题发生变化。 - KesaVan

0

我终于找到了解决方案,就是在BundleConfig中添加这一行:

BundleTable.EnableOptimizations = false;

通过这样做,您禁用了调试和发布模式下捆绑包所做的优化!因此,您完全失去了使用它们的优势。在这一点上,通过捆绑包包含CSS和JS毫无意义 - 直接将它们包含到HTML布局中更容易。如果使用此设置代码成功运行,则意味着您的问题是由我在答案中描述的冲突引起的。 - winterlude
哦,真的吗!那我会尝试你在回答中提到的方法,希望它能够起作用。无论如何,非常感谢你的回复。 - ItShine

0

有时候,捆绑包的HTTP请求会被IIS处理而不是MVC框架。当捆绑包的虚拟路径与文件系统上的实际路径匹配时,可能会发生这种路由冲突。

正如官方ASP.NET文档结尾所述(http://www.asp.net/mvc/tutorials/mvc-4/bundling-and-minification):

创建捆绑包时遵循的一个好习惯是在捆绑包名称中包含“bundle”作为前缀。这将防止可能的路由冲突。

因此,我建议您重新命名捆绑包,确保名称与您网站中的任何路径不相似。

您可以查看以下类似问题的答案:


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接