2011-09-26 66 views
36

我使用EF 4.1代碼第一次爲簡單起見,假設我有以下的實體類:轉換字節數組圖像並顯示在Razor視圖

public class Person 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public Byte[] Image { get; set; } 
} 

我已成功創建一個工作的創建視圖,允許添加一個Person對象到數據庫中。

但是,當我來顯示一個人的詳細信息時,我卡住顯示圖像。幾個小時谷歌搜索後,我有以下幾點:

// To convert the Byte Array to the author Image 
public FileContentResult getImg(int id) 
{ 
    byte[] byteArray = DbContext.Persons.Find(id).Image; 
    return byteArray != null 
     ? new FileContentResult(byteArray, "image/jpeg") 
     : null; 
} 

而且在我試圖名單中的人士細節來看,我有以下的,以獲得要顯示的圖片:

<img src="@Html.Action("getImg", "Person", new { id = item.Id })" alt="Person Image" /> 

但是上面是無法正常工作,我的圖片來源[src]屬性返回空

我會非常感謝一些幫助與獲取我的圖像顯示。

謝謝。

Ciwan。

回答

35

像這樣:

<img src="@Url.Action("getImg", "Person", new { id = item.Id })" alt="Person Image" /> 

你需要Url.Action,而不是Html.Action,因爲你只是想生成一個URL到GetImg行動。 Html.Action做點什麼entirely different

+2

真棒,似乎現在的工作,**謝謝達林** :) – Ciwan

+0

但如果是一些什麼PDF文件的字節數組。我們如何顯示預覽鏈接或可能是下載PDF的鏈接。 。 – Unbreakable

+0

如果它不是圖像會怎麼樣?我們如何處理這個問題。很明顯,我們不能把PDF格式的img src標籤作爲 – Unbreakable

54

還有的在做這個,如果你已經發生在你的模型中的圖像加載了一個更簡單的方法:你不需要再去服務器只是爲了獲取圖像

<img src="data:image;base64,@System.Convert.ToBase64String(Model.Image)" /> 

這樣做的方式您正在操作的數據庫中的byte[]

+0

這是行得通的,但是IE8中有32KB的限制 – refactor

+0

但是,它是一個pdf文件還是word文件。我們如何顯示一個鏈接,可能會在剃刀代碼中預覽內容。在控制器動作中提供,我們有字節數組。 – Unbreakable

0

我發現在Razor MVC頁面中從Model屬性顯示動態加載的SVG圖像的最佳方式是將Html.DisplayFor(..)與.ToHTMLString()組合使用。對於我的情況,請在名爲Image的模型屬性中存儲基本64位SVG圖像+ XML數據字符串。這裏是我的代碼:

<img src='@Html.DisplayFor(model => model.Image).ToHtmlString()' /> 

這似乎是我能得到的SVG圖像在Chrome,Firefox和IE瀏覽器中正確顯示的唯一途徑。

乾杯

相關問題