2012-05-09 28 views
0

我有一個控制器從數據庫中獲取相同的動作,例如名字,年齡,圖像(字節[])的員工。FileContentResult在視圖中呈現沒有特定的控制器動作

因此,我將信息存儲在ViewBag中。然後在查看了視頻中的特定代碼:

<img src="@ViewBag.Image" alt="Logo" /> 

但是,當我看到響應的內容我有:

<img src="System.something.FileContentResult" alt="Logo" /> 

我已經看到了很多的例子,從獲取FileContentResult在例如控制器的特定操作:

(該代碼僅是一個例子)

public ActionResult GetEmployeeImage (int id){ 
    byte[] byteArray = GetImageFromDB(id); 
    FileContentData file = new File (byteArray,"image/jpg"); 
    return file; 
} 

然後渲染與圖像:

<img src="@Url.Action("GetEmployeeImage", "Home", new { id = ViewBag.Id })" alt="Em" /> 

,但我不想因爲我已經有圖像。

我怎樣才能把它渲染到視圖拋出ViewBag?

謝謝!

PD:Rendering image in a View是相同的,但得不出結論

回答

4

一種可能性是使用data URI scheme。請記住,這隻適用於支持它的瀏覽器。這個想法是,你會嵌入圖像數據爲Base64串入img標籤的src屬性:

<img src="data:image/jpg;base64,@(Html.Raw(Convert.ToBase64String((byte[])ViewBag.Image)))" alt="" /> 

如果在另一方面,你要在所有瀏覽器上運行的解決方案,你將不得不使用一個控制器爲圖像提供服務。因此,在初始請求中只提取員工的ID,名稱和年齡屬性,而不是圖像。然後編寫一個控制器動作,它將以僱員ID爲參數,查詢數據庫,獲取相應的圖像並將其作爲文件結果返回。然後在視圖內指向img標籤的src屬性到這個控制器動作。

+0

好吧,所以我會實現解決方案,在不同的請求中處理圖像。 謝謝! – gonzalomelov

+0

我試過這個,但得到一個錯誤,說它無法將FileContentResult轉換爲byte []。 –

+1

@CiaranG,這可能是因爲你沒有在'ViewBag.Image'裏面存儲'byte []'。 –

相關問題