ASP.NET MVC搭配EF+SQL Server时byte[]类型图片无法在视图显示报错如何解决
报错原因
你调用的@Url.Content()方法仅支持传入字符串类型的资源路径参数,你直接把prod_image字段的byte[]二进制数据传进去,自然会触发「无法将byte[]转换为string」的类型错误。
解决方法1:转Base64内嵌图片(适合小体积图片)
直接在视图里把二进制的byte数组转成Base64格式的Data URL,赋值给img的src属性即可,不需要修改现有控制器逻辑:
把你视图里报错的img标签替换为以下代码即可:
<img src="data:image/png;base64,@Convert.ToBase64String(item.prod_image)" height="100" width="100" alt="产品图片"/>
提示:如果你的图片不是png格式,把上述代码中的
image/png替换为对应MIME类型即可,比如jpg格式对应image/jpeg。
解决方法2:新增控制器动作返回图片(更推荐,适配全场景)
这种方式不会把图片数据直接嵌入页面源码,页面加载性能更好,也符合MVC的职责分离规范:
- 首先在对应控制器中新增获取图片的动作方法:
public ActionResult GetProductImage(int productId) { using (inventoryDBEntities1 dbe = new inventoryDBEntities1()) { var product = dbe.tbl_product.FirstOrDefault(p => p.productID == productId); if (product == null || product.prod_image == null) { // 也可以返回默认占位图的File结果 return Content("无可用图片"); } // 如需动态适配不同图片格式,可以把MIME类型也存入数据库字段读取 return File(product.prod_image, "image/jpeg"); } }
- 修改视图里的img标签,调用上述动作即可:
<img src="@Url.Action("GetProductImage", new { productId = item.productID })" height="100" width="100" alt="产品图片"/>
内容的提问来源于stack exchange,提问作者Wilfredo Domanico
相关产品推荐
相关产品推荐

