2010-09-08 43 views
2

有關如何顯示圖像(作爲圖像存儲在數據庫中以及作爲代碼中的字節數組)的問題已多次回答(例如, Display image from database in asp mvc),但是如果您想要在表單的上下文中顯示圖像,該怎麼辦?也就是說,我有一個對象有幾個字段,其中一個是圖像。我已經得到了它在用戶可以上傳圖像的地方工作,並將其作爲保存過程的一部分與其餘的對象字段一起存儲。但是,如何將其與其餘數據一起發回(並理想地顯示)以填充「編輯」表單?我見過的所有解決方案都有一些ShowImage操作,它需要一個Id並檢索圖像並將其傳輸到響應。但是,我不明白在這種情況下它是如何工作的。MVC:使用數據庫中的其他表單數據在窗體中顯示圖像

我能想到的唯一的事情就是填充表單,然後使用jquery檢索圖像並將其顯示在表單中,但這似乎是不必要的額外流量。

任何人都知道如何做到這一點?

謝謝。

回答

0

我會做一個控制器操作,只是服務器上的圖像。

然後,在顯示圖像和其他數據的視圖中,只需將URL傳遞給正確的操作即可將視圖數據的其餘部分提供給圖像。然後使用img標籤通過將視圖數據網址設置爲src來顯示圖像。 img將調用該URL併爲您取回。

所以要分解它,你有兩個控制器的行爲,如GetImage和FormDetails或什麼的,而GetImage只用於從你的數據庫中獲取圖像,並返回字節數組作爲圖像響應(你也可以做一些服務器端檢查爲了安全)。 FormDetails操作只會獲取包含圖片URL的所有數據,然後放在一起。根據您的評論

編輯:要解決的兩個電話,你可以實現一些緩存......當它被上傳,你可以把它暫時存儲,如:

// Cache it for 5 mins (and keep it cached until it has not be accessed for 5 mins. 
System.Web.HttpContext.Current.Cache.Insert("YourImage" + imageID.ToString(), 
    yourImage, null, System.Web.Caching.Cache.NoAbsoluteExpiration, 
    new TimeSpan(0, 5, 0)); 

然後在你的控制器的行動,擔任了,你可以檢查,看看是否存在於緩存的價值首先做DB通話將作爲描述節省你的第二次在大多數情況下,如果你的情況是之前的圖像:

if (System.Web.HttpContext.Current.Cache["YourImage" + imageID.ToString()] == null) 
{ 
    // get image from DB 
} 
else 
{ 
    // image is cached so serve it up! 
} 
+0

謝謝,凱爾。這與我上面提出的方法類似。不管怎樣,我們都在談論兩個數據庫調用。我真的希望有一種避免額外往返的方法。 – sydneyos 2010-09-08 22:42:35

+0

@weenet我根據您的意見更新了我的答案。希望這將解決你的問題:) – Kelsey 2010-09-09 01:12:47

+0

謝謝,凱爾西 - 這還不是我所追求的,但總比沒有好。我所追求的只是將圖像填充爲填充表單的一部分 - 即從object.Property1填充文本框,從object.Property2填充圖像標記,從object.Property3等填充複選框,全部作爲部分的初始渲染。這似乎仍然需要一個只處理圖像的控制器操作。好吧。 – sydneyos 2010-09-29 20:37:29

相關問題