2013-12-12 253 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

這些日子不支持的瀏覽器列表非常少。除非要求支持真正的舊瀏覽器,否則應該沒問題。 –