2016-10-13 20 views
0

データベースから画像を表示しようとしています。しかし、私は次のエラーが発生しています。MVCに画像を表示

System.Web.Mvc.UrlHelper.Content(string)に最適なオーバーロードされたメソッドの一致には、無効な引数がいくつかあります。ここで

私のコードです:

<table> 
    <tr> 
     <td> 
      Category ID 
     </td> 

     <td> 
      Category Name 
     </td> 

     <td> 
      Category Image 
     </td> 
    </tr> 
    @foreach (var item in Model) 
    { 
    <tr> 
     <td>@item.CategoryID</td> 
     <td>@item.CategoryName</td> 
     <td><img src="@Url.Content(item.CategoryImage)" /></td> 

    </tr> 
    } 
</table> 
+0

「item.CategoryImage'」にはどのような値が入りますか? –

+0

どのデータ型が 'item.CategoryImage'ですか?それはイメージのパスの文字列でなければならず、私はあなたがバイトを渡していると思います。この場合、 '@ Url.Content'は正しい選択ではありません。 – Crowcoder

+0

このエラーが発生したばかりです。 System.Web.Mvc.UrlHelper.Content(string)の最適なオーバーロードされたメソッドの一致には、無効な引数がいくつかあります。 –

答えて

1

これは私が使用するコードです。この場合は

private static string ImageByteToBase64ImageTag(byte[] array) 
    { 
     string base64 = Convert.ToBase64String(array); 
     return "<img class=\"img-responsive center-block\" src=\"data:image/png;base64," + base64 + " \" />"; 
    } 

、base64で画像として画像で作業する方がはるかに簡単になります。私のコードはかなり単純ですが、あなたがしなければならないのは、画像の配列を渡してbase64文字列を得ることだけです。 JSONを使ってイメージを返すこともできます。あなたはViewBagまたはモデルにだけ、次の部分を返すことができます。

ViewBag.ImageData = "data:image/png;base64," + base64String 

し、HTML

<img src="@Html.Raw(ViewBag.ImageData)" /> 

にまたはあなたのモデルで、ちょうど画像の文字列プロパティを作ります。

+0

質問の下のコメントで説明したように、これは_an_アプローチですが、最も実行可能ではない可能性があります。それは多くの要因、とりわけ画像の数とサイズに依存します。 1MBの画像と1KBのHTMLを話していると、インライン、ベース64エンコードされた画像のため、突然ページがHTMLの1,3 MB以上になり、ブラウザはレンダリングをすべて開始しませんHTMLがダウンロードされます。 – CodeCaster

-1
public ActionResult GetImage() 
{ 
    var imageFile = System.Web.HttpContext.Current.Server.MapPath("ImagePathHere"); 
    var srcImage = Image.FromFile(imageFile); 
    using (var stream = new MemoryStream()) 
    { 
     srcImage.Save(stream, ImageFormat.Png); 
     return File(stream.ToArray(), "image/png"); 
    } 
} 
+1

Stack Overflowは「お気に入りのスニペットを共有する」サイトではありません。このアクションメソッドでは、ディスク上にファイルが存在すると見なしますが、この質問ではデータベース列に存在します。コードのみの回答も良い答えではありません。次回のコードの説明を追加してみてください。 – CodeCaster

+0

話す前にコードを調べると、このFileメソッドがbyte []を取得し、FileContentResultを返すことがわかります。 –

+0

ダンプする前にコードが何をするのか説明すれば、あなたが何を言おうとしているのかを理解するために、行ごとに読む必要はありません。それは私が以前のコメントに立っていると言われています。あなたが投稿したコードはファイルが存在すると予想していますが、ここには該当しません。 – CodeCaster