affichage de l'image de DB dans Razor / MVC3
J'ai une table dans la db, qui sont les suivantes :- CountryID, CountryName, et CountryImage.
Maintenant j'essaie d'afficher l'image dans l'index et j'ai le texte suivant dans la Vue :-
<td>
@if (item.Image != null)
{
<img src="@Model.GetImage(item.Image)" alt="@item.CountryName"/>
}
et puis dans le ViewModel j'ai :-
public FileContentResult GetImage(byte[] image)
{
if (image != null)
return new FileContentResult(image, "image/jpeg");
else
{
return null;
}
}
Cependant je ne peux pas voir l'image correctement.
Ce que je fais mal?
Merci d'avance pour votre aide et le temps
Mise à JOUR
Ok, Donc j'ai mis en œuvre à la suite de l'avis :-
<td>
@if (item.Image != null)
{
<img src="@Url.Action("GetImage", "CountryController", new { id = item.CountryID })" alt="@item.CountryName" />
}
</td>
et dans le CountryController :-
public ActionResult GetImage(int id)
{
var firstOrDefault = db.Countries.Where(c => c.CountryID == id).FirstOrDefault();
if (firstOrDefault != null)
{
byte[] image = firstOrDefault.Image;
return File(image, "image/jpg");
}
else
{
return null;
}
}
mais quand j'ai essayer de déboguer le code, le ActionResult GetImage n'est pas d'être frappé
source d'informationauteur Johann
Vous devez vous connecter pour publier un commentaire.
Deux possibilités.
Écrire l'action d'un contrôleur à la place qui, compte tenu de l'id de l'image sera de retour cette image:
et puis:
Évidemment maintenant dans votre modèle initial, vous n'avez pas besoin de la
Image
de la propriété. Ce sera récupéré par la suite dans l'action du contrôleur responsable de cela.Une autre possibilité est d'utiliser les données de schéma d'URI à incorporer les images en base64 cordes, mais il pourrait ne pas être largement pris en charge par tous les navigateurs:
Vous n'avez pas besoin d'un contrôleur de l'action, dans ce cas, les images sont incorporées directement dans votre balisage en base64 chaînes.