2013-12-12 184 views
0

这里是我的模型无法显示图像

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 
    } 
} 

但我只在这里看到你好ALT文字而不是真实的图像。我究竟做错了什么?

+1

阅读生成的来源。您需要使用'data:'URI,或者创建一个单独的HTTP请求。 – SLaks

回答

1

src属性必须是指向图像文件位置的URL,而不是类型为System.Drawing.Image的对象。

将您的MyImage属性类型更改为String,将其设置为图像文件所在位置的相对(或绝对)路径,并查看其是否有效。

+0

我只是从数据库中读取这张图片;所以它不在位于文件系统上的文件中 –

+0

如果它存储在数据库中的blob中,那么在可以显示它之前,很可能必须将其另存为文件。查看@Simon的答案 - 您可以在不保存的情况下显示它。 –

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必须是一个stri NG。

这里是一个内存中的图像转换为base64的一个示例:Converting image to base64

我将提醒你从从数据库加载图像不断。如果您的网站上有很多用户,您会很快看到您的工作集腾空而起。最好有数据库作为查找..然后检查文件系统上是否存在文件。如果有,请使用文件系统上的文件。如果不是,请从数据库中读取并将其写入文件系统。然后,您可以继续从文件系统中继续加载该特定文件。

+0

我相信第二种解决方案有浏览器限制。此外,图像不被缓存。他最好与第一个一起去。 –

+0

这些日子不支持的浏览器列表非常少。除非要求支持真正的旧浏览器,否则应该没问题。 –