J'ai un modèle avec un fichier image de tableau d'octets que je veux afficher sur la page.
Comment puis-je faire cela sans retourner à la base de données?
Toutes les solutions que je vois utilisent un ActionResult
pour revenir à la base de données pour récupérer l'image, mais j'ai déjà l'image sur le modèle ...
c#
asp.net-mvc
razor
NSP ALT
la source
la source
Réponses:
Quelque chose comme ça peut fonctionner ...
Comme mentionné dans les commentaires ci-dessous, veuillez utiliser ce qui précède en sachant que bien que cela puisse répondre à votre question, cela ne résoudra peut-être pas votre problème . En fonction de votre problème, cela peut être la solution, mais je n'exclurais pas complètement l'accès à la base de données deux fois.
la source
:)
Cela a fonctionné pour moi
la source
Je recommande quelque chose de ce genre, même si l'image vit à l'intérieur de votre modèle.
Je réalise que vous demandez un moyen direct d'y accéder directement depuis la vue et beaucoup d'autres ont répondu à cela et vous ont dit ce qui ne va pas avec cette approche, c'est donc juste une autre façon de charger l'image de manière asynchrone pour vous et moi pense est une meilleure approche.
Modèle d'échantillon:
Exemple de méthode dans le contrôleur:
Vue
la source
Une façon consiste à ajouter ceci à une nouvelle classe c # ou une nouvelle classe HtmlExtensions
alors vous pouvez le faire dans n'importe quelle vue
la source
Si vous pouvez encoder vos octets en base 64, vous pouvez essayer d'utiliser le résultat comme source d'image. Dans votre modèle, vous pouvez ajouter quelque chose comme:
Et à votre avis:
la source
Si l'image n'est pas si grande, et s'il y a de bonnes chances que vous la réutilisiez souvent, et si vous n'en avez pas trop, et si les images ne sont pas secrètes (ce qui signifie que ce n'est pas grand traiter si un utilisateur pouvait potentiellement voir l'image d'une autre personne) ...
Il y a beaucoup de "si" ici, donc il y a de fortes chances que ce soit une mauvaise idée:
Vous pouvez stocker les octets d'image
Cache
pendant une courte période et faire pointer une balise d'image vers une méthode d'action, qui à son tour lit dans le cache et crache votre image. Cela permettra au navigateur de mettre en cache l'image de manière appropriée.Cela a l'avantage supplémentaire (ou est-ce une béquille?) De travailler dans des navigateurs plus anciens, où les images en ligne ne fonctionnent pas dans IE7 (ou IE8 si elles sont supérieures à 32 Ko).
la source
Ceci est une version modifiée de la réponse de Manoj que j'utilise sur un projet. Juste mis à jour pour prendre une classe, des attributs html et utiliser le TagBuilder.
Qui peut être utilisé alors comme suit:
la source
Vous devez avoir un octet [] dans votre base de données.
Mon octet [] est dans mon objet Person:
Vous devez convertir votre octet [] en chaîne. Donc, j'ai dans mon contrôleur:
Ensuite, dans mon fichier .cshtml, mon modèle est un ViewModel. Voici ce que j'ai dans:
Je l'utilise comme ça dans mon fichier .cshtml:
"data: extension de fichier image / image ; base64, {0}, votre chaîne d'image "
Je souhaite que cela aide quelqu'un!
la source
Si vous souhaitez présenter l'image, ajoutez une méthode en tant que classe d'assistance ou au modèle lui-même et autorisez la méthode à convertir l'image du tableau d'octets en un format d'image tel que PNG ou JPG, puis à la convertir en chaîne Base64. Une fois que vous avez cela, liez la valeur base64 sur votre vue au format
"data: image / [extension de type de fichier image] ; base64, [votre chaîne base64 va ici] "
Ce qui précède est attribué à l' attribut de la
img
balisesrc
.Le seul problème que j'ai avec cela est que la chaîne base64 est trop longue. Donc, je ne le recommanderais pas pour plusieurs modèles affichés dans une vue.
la source
J'ai créé une méthode d'assistance basée dans la réponse ci-dessous et je suis assez heureux que cette aide puisse aider autant que possible.
Avec un modèle:
L'assistant est:
La vue reçoit un objet: ICollection, vous devez donc l'utiliser dans la vue dans une instruction foreach:
la source