无法显示图像

时间:2013-12-12 21:42:49

标签: c# asp.net-mvc-3

这是我的模特

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 而不是真实图片。我做错了什么?

2 个答案:

答案 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,将其设置为图像文件所在位置的相对(或绝对)路径,并查看其是否有效。