EF 4.1 Code Firstを使用しています。簡単にするために、次のEntityクラスがあるとします。
public class Person
{
public int Id { get; set; }
public string Name { get; set; }
public Byte[] Image { get; set; }
}
データベースへのPersonオブジェクトの追加を許可する作業ビューを作成することができました。
しかし、人の詳細を表示するようになったとき、私はImageの表示にこだわっています。 Googleを長時間検索した結果、次のことがわかりました。
// 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]属性は空を返しますです。
私は画像を表示するのに役立つに感謝します。
ありがとうございました。
シワン。
このような:
<img src="@Url.Action("getImg", "Person", new { id = item.Id })" alt="Person Image" />
GetImg
アクションのURLを生成したいだけなので、Url.Action
ではなくHtml.Action
が必要です。 Html.Action
は何かを行います 完全に異なる 。
モデルに既にイメージがロードされている場合、これを行うさらに簡単な方法があります。
<img src="data:image;base64,@System.Convert.ToBase64String(Model.Image)" />
この方法を使用すると、イメージを取得するためだけにサーバーに再度アクセスする必要はありませんbyte[]
実行中のデータベースから。
Razor MVCページのModelプロパティから動的にロードされたSVG画像を表示する最良の方法は、.ToHTMLString()と組み合わせてHtml.DisplayFor(..)を使用することであることがわかりました。私の場合、Imageというモデルプロパティに格納されたベース64 SVG Image + XMLデータ文字列があります。ここに私のコードがあります:
<img src='@Html.DisplayFor(model => model.Image).ToHtmlString()' />
これは、Chrome、FireFox、およびIEでSVG画像を適切に表示できる唯一の方法のように思えました。
乾杯