MVC 4 网站上发生的一个常见问题是当您拥有 css 包时发布和调试之间的差异。不一定是你的情况,但你有症状。
我将举例说明。
如果您有如下所示的捆绑包:
var styles = new StyleBundle("~/Content/css").Include(
"~/Content/toastr.css",
"~/Content/flags/stylesheets/flags16.css",
"~/Content/flags/stylesheets/flags32.css",
"~/Content/Site.css")
在 flags16.css 你有:
background:url('flags/images/flags16.png');
其中使用文件~Content/flags/images/flags16.png
这将在发布模式下工作(web.config 中的编译调试 =“false”),因为捆绑中的所有 css 文件都将作为 1 个文件提供,~/Content/css
其相对路径'flags/images/flags16.png'
指向正确的文件。但是,在调试模式下,ASP.NET MVC 将禁用缩小,如果您@Styles.Render("~/Content/css")
在视图中使用,它将呈现指向捆绑包中包含的每个文件的链接,因此会有:
<link href="/WorkOrders.Web/Content/flags/stylesheets/flags16.css" rel="stylesheet">
并且从该路径开始,图像的相对路径不正确,因此 flags16.png 中的图像将不会被渲染。
解决此问题的一种方法是,您需要将包含对图像的引用的 .css 文件移动到 bundle 指向的位置(在本例中为 ~/Content),因此在提供缩小和原始文件时它将具有相同的路径。
更新由于您的应用程序不是 mvc4,并且当您的应用程序不在您网站的根目录中时(即当它在 localhost/myapp 中时)您会遇到问题,那么您需要检查对图片的引用中的路径。您可能绝对引用了它们 ( '/somepath/mypic.png'
),当您的应用位于 时localhost/MyApp
,路径需要为localhost/MyApp/somepath/mypic.png
. @Url.Content(~/somepath/mypic.png)
如果您从 cshtml 使用它,您可以通过将路径替换为 来解决这个问题。如果路径在 css 中,那么您需要将相对路径放置到您的图片中。