我會做一個控制器操作,只是服務器上的圖像。
然後,在顯示圖像和其他數據的視圖中,只需將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!
}
謝謝,凱爾。這與我上面提出的方法類似。不管怎樣,我們都在談論兩個數據庫調用。我真的希望有一種避免額外往返的方法。 – sydneyos 2010-09-08 22:42:35
@weenet我根據您的意見更新了我的答案。希望這將解決你的問題:) – Kelsey 2010-09-09 01:12:47
謝謝,凱爾西 - 這還不是我所追求的,但總比沒有好。我所追求的只是將圖像填充爲填充表單的一部分 - 即從object.Property1填充文本框,從object.Property2填充圖像標記,從object.Property3等填充複選框,全部作爲部分的初始渲染。這似乎仍然需要一個只處理圖像的控制器操作。好吧。 – sydneyos 2010-09-29 20:37:29