2010-03-15 63 views
0

我無法從數據庫中顯示圖像。我認爲保存圖像的方法正在工作,因爲我在數據庫中看到varbinary字段有一些值,並且該圖像類型是正確的。也是圖像的大小。但是當我想要顯示產品圖像時,我什麼都沒有得到。只是空白..這裏是我的代碼...使用asp.net MVC顯示來自數據庫的圖像時出現問題2

public byte[] GetImage(int productID) 
    { 
     Product product = products.GetByID(productID); 

     byte[] imageData = product.ImageData.ToArray(); 

     return imageData; 
    } 

該代碼是在我的控制器。二是從視圖代碼:

<% if (product.ImageData != null) { %> 
    <img src='/product/getimage/<%= Html.Encode(product.ID) %>' alt=""/> 
    <% } %> 

我想在這裏發現堆棧溢出的一些解決方案,每個人都像這樣做,但它是爲他們工作。我沒有任何想法爲什麼圖像不顯示。當我看着網頁的源代碼在調試我有:

<img src='/product/getimage/18' alt=""/> 

我使用.NET 4.0,MVC 2,VS 2010 ...在此先感謝

+0

的話,試着將它背後的圖像的延伸?像.jpg或.png – Younes 2010-03-15 15:14:09

回答

1

我的猜測是,你有一個路由問題。如果URL /product/getimage/18應爲您的操作工作,你需要有一個看起來像這樣的路線:

routes.MapRoute("ProductImage", 
    "product/getimage/{productID}", 
    new { controller = "Product", action = "GetImage", productID = "" } 
); 

爲了證實這一點,你應該使用firebug並勾選「網絡」選項卡(或您的行爲設置一個斷點並在加載頁面時查看它是否被擊中)。

我也建議使用構建幫助器來生成您的網址(那麼這種問題將永遠不會發生)。取而代之的src='/product/getimage/<%= Html.Encode(product.ID) %>'你可以寫src='<%=Url.Action("GetImage", "Product", new { productID = product.ID })%>'

+0

感謝Mattias。你的解決方案一切正常。 – Renato 2010-03-15 15:40:24

0

您有:

<img src='/product/getimage/18' alt=""/> 

通常我會說一個圖像標記看起來是這樣的:

<img src='/product/getimage/18.jpg' alt=""/> 
1

試圖改變你的方法:

public void GetImage(int productID) 
{ 
    Product product = products.GetByID(productID); 

    Response.ContentType = "image/jpeg"; 
    Response.BinaryWrite(product.ImageData.ToArray()); 

} 
0

我需要註冊在我的global.cs路線文件中像馬蒂亞斯建議。

此外,我需要修改我在控制器這個動作:

public FileContentResult GetImage(int productID) 
    { 
     Product product = products.GetByID(productID); 

     return File(product.ImageData.ToArray(), product.ImageMimeType); 
    }  

我希望感謝大家的快速解答......

相關問題