带有实体框架和 SQL Server 数据库的 ASP.NET MVC - 图像未显示在视图中......错误显示“无法将“字节”转换为“字符串”
Posted
技术标签:
【中文标题】带有实体框架和 SQL Server 数据库的 ASP.NET MVC - 图像未显示在视图中......错误显示“无法将“字节”转换为“字符串”【英文标题】:ASP.NET MVC with Entity Framework and a SQL Server database - image not showing in view ... The error says 'cannot convert "byte" to "string"' 【发布时间】:2021-12-25 18:57:13 【问题描述】:我是 ASP.NET MVC 的新手,所以请不要评判我...我遇到的问题是我的 SQL Server(字节数据类型)中的图像没有显示在我的视图中。它说“无法将byte[]
转换为字符串”。我该怎么办?
这是我的控制器方法ViewProduct
:
public ActionResult ViewProduct()
return View();
public ActionResult ViewProd()
inventoryDBEntities1 dbe = new inventoryDBEntities1();
return View(dbe.tbl_product.ToList());
这是我的模型类,名为tbl_product
:
public partial class tbl_product
public int productID get; set;
public byte[] prod_image get; set;
这是我的观点:
@model IEnumerable<PointofSale.Models.tbl_product>
<table>
<tr>
<td>
Image
</td>
</tr>
<tr>
@foreach (var item in @Model)
<td>
// The error is around here ( V )!!
<img src="@Url.Content(item.prod_image)" />
</td>
</tr>
</table>
【问题讨论】:
@Url.Content
需要一个代表应用程序虚拟目录中文件路径的字符串,例如:"~/images/exampleImage.png"
有人可能会好奇为什么要将类似的内容存储在byte[]
属性中. prod_image
是否有可能不保存文件路径,而是保存二进制图像的原始字节?
【参考方案1】:
您需要通过将byte[]
转换为base64 字符串 来显示图像。
@foreach (var item in @Model)
<td>
@
string imageBase64Data = Convert.ToBase64String(item.prod_image);
string imageDataURL = string.Format("data:image/png;base64,0", imageBase64Data);
<img src="@Url.Content(imageDataURL)" />
</td>
参考文献
Display Image From Byte Array In ASP.NET MVC
【讨论】:
不错的答案。这确实意味着存储在数据库中的所有图像都需要采用一致的格式,在这种情况下,当它们被序列化到数据库中时是 PNG。如果它们可以是其他格式,则数据结构需要记录格式以及要输出到 URL 或馈送到转换器以生成 PNG base64 字符串的字节。 感谢史蒂夫的指出。要么发布所有者来标准化图像的格式,要么使用带有列存储文件扩展名的 DB 表。并从数据库中检索它,将imageDataUrl
设置为String.Format("data:image/png;0,1", file_extension, imageBase64Data);
。以上是关于带有实体框架和 SQL Server 数据库的 ASP.NET MVC - 图像未显示在视图中......错误显示“无法将“字节”转换为“字符串”的主要内容,如果未能解决你的问题,请参考以下文章
使用带有实体框架代码优先和 ASP.NET MVC 3 和 mvc miniprofiler 的 SQL Server CE 时出现问题
使用带有 MVC4 SQL Server 的实体框架插入后触发器不会触发