这是我的模特
public class MyModel
{
public System.Drawing.Image MyImage { get; private set; }
public MyModel(System.Drawing.Image myImage)
{
this.MyImage = myImage;
}
}
这是我的观点
@model MyModel
@using MyNamespace.MyModels;
@{
ViewBag.Title = "title";
}
<img id="11111" src="@Model.MyImage" alt="Hello alt text" />
这是我的控制器
public class MyController : Controller
{
public ActionResult Index()
{
Image img = GoAndGetImage(55);
MyModel model = new MyModel(img);
return View(model);
}
private System.Drawing.Image GoAndGetImage(int id)
{
// Retrieve bytesArray from sql db, convert to System.Drawing.Image type
}
}
但我只能看到 Hello alt text 而不是真实图片。我做错了什么?
答案 0 :(得分:2)
您正尝试将实际的物理位图从内存传递到页面中。这不起作用。
您需要:
a)传入文件的字符串路径。即:
this.MyImage = "/your/path/to/file.jpg";
...和...
src="@Model.MyImage"
b)Base64对图像进行编码并将其转储到页面:
this.MyImage = base64String(ImageObject);
...和...
src="data:image/jpeg;base64,@Model.MyImage"
无论哪种方式.. MyImage
必须是字符串。
以下是将内存中图像转换为base64的示例:Converting image to base64
我会提醒您不要经常从数据库加载图像。如果您的网站上有很多用户,您很快就会看到您的工作集飙升。最好将数据库作为查找..然后检查文件系统上是否存在文件。如果是,请使用文件系统上的文件。如果没有..从数据库中读取它并将其写入文件系统。然后,您可以在将来继续从文件系统加载该特定文件。
答案 1 :(得分:1)
src
属性必须是指向图像文件位置的URL,而不是System.Drawing.Image
类型的对象。
将MyImage
属性类型更改为String
,将其设置为图像文件所在位置的相对(或绝对)路径,并查看其是否有效。