Ich verwende EF 4.1 Code First und der Einfachheit halber habe ich die folgende Entitätsklasse:
public class Person
{
public int Id { get; set; }
public string Name { get; set; }
public Byte[] Image { get; set; }
}
Es ist mir gelungen, eine funktionierende Erstellungsansicht zu erstellen, die das Hinzufügen eines Personenobjekts in die Datenbank ermöglicht.
Wenn ich jedoch die Details einer Person anzeigen möchte, bin ich bleib beim Anzeigen des Bildes hängen. Nach stundenlangem Durchsuchen von Google habe ich Folgendes:
// 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;
}
Und in der Ansicht, in der ich versuche, die Personendetails aufzulisten, habe ich Folgendes, um das Bild anzuzeigen:
<img src="@Html.Action("getImg", "Person", new { id = item.Id })" alt="Person Image" />
Das obige ist jedoch funktioniert nicht, mein Bildquellen-Attribut [src] gibt leer zurück.
Ich würde einige Hilfe sehr schätzen mit der Anzeige meiner Bilder.
Danke dir.
Ciwan.
So was:
<img src="@Url.Action("getImg", "Person", new { id = item.Id })" alt="Person Image" />
Sie benötigen Url.Action
und nicht Html.Action
, da Sie nur eine URL für die GetImg
-Aktion generieren möchten. Html.Action
macht etwas ganz anders .
Das geht noch einfacher, wenn Sie bereits das Bild in Ihr Modell geladen haben:
<img src="data:image;base64,@System.Convert.ToBase64String(Model.Image)" />
Auf diese Weise müssen Sie nicht erneut zum Server gehen, um das Image byte[]
aus der Datenbank abzurufen.
Ich fand, dass der beste Weg, ein dynamisch geladenes SVG-Bild aus einer Model-Eigenschaft in einer Razor-MVC-Seite anzuzeigen, Html.DisplayFor (..) in Kombination mit .ToHTMLString () ist. Lassen Sie in meinem Fall eine Basis-64-SVG-Image + XML-Datenzeichenfolge, die in der Modelleigenschaft namens Image gespeichert ist. Hier ist mein Code:
<img src='@Html.DisplayFor(model => model.Image).ToHtmlString()' />
Dies schien die einzige Möglichkeit zu sein, das SVG-Bild in Chrome, FireFox und IE richtig anzuzeigen.
Prost