我在myasp.net MVC Web应用程序中有以下代码: -
<a href="~/Content/uploads/@(item.ID).png"><img class="thumbnailimag" src="~/Content/uploads/@(item.ID).png" /></a> @Html.ActionLink(item.Name,"Details","DataCenter", new{id = item.ID},null)
以下CSS:
.thumbnailimag {
width:30px;
height:30px;
border:thin blue;
background-image:url("/Content/uploads/virtual-data-center.jpg");
}
但如果图像不存在,每个bowser将以不同的方式对待它。我设置了一个背景图像,但仍然在IE上它将在默认图像上显示“X”,如下所示: -
如果src不存在,有没有人可以建议显示默认图像?
答案 0 :(得分:24)
当然,对于您的图片使用:
<img src="fails/to/load.png" onerror="this.src='path/to/replacement/image.jpg'" />
CSS中没有解决方案,它需要将JS应用于每个<img>
标记或顶级处理程序,以替换所有图像的onerror
事件。
答案 1 :(得分:8)
处理这个服务器端要好得多:
public static class HtmlHelperExtensions
{
public static string ImageOrDefault(this HtmlHelper helper, string filename)
{
var imagePath = uploadsDirectory + filename + ".png";
var imageSrc = File.Exists(HttpContext.Current.Server.MapPath(imagePath))
? imagePath : defaultImage;
return imageSrc;
}
private static string defaultImage = "/Content/DefaultImage.png";
private static string uploadsDirectory = "/Content/uploads/";
}
然后您的观点被简化为:
<img src="@Html.ImageOrDefault(item.ID)" />
答案 2 :(得分:0)
您可以尝试添加一些js,例如向img标签添加一个事件监听器:
<img id="something" data-isloaded="false" onload="$(this).data('isloaded', 'true')" />
然后你可以检查是否加载了图像:
if ($('#myimage').data('isloaded') === 'false' ) {
// not loaded, do stuff here
// add some replacement thumbnail
// or set background image to the parent element
}