webentwicklung-frage-antwort-db.com.de

Konvertieren Sie ein Byte-Array in ein Bild und zeigen Sie es in der Rasiermesser-Ansicht an

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.

37
J86

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 .

35
Darin Dimitrov

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.

58

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

0
sondlerd