Tenho um modelo com um arquivo de imagem de matriz de bytes que desejo mostrar na página.
Como posso fazer isso sem voltar ao banco de dados?
Todas as soluções que vejo usam um ActionResult
para voltar ao banco de dados para recuperar a imagem, mas já tenho a imagem no modelo ...
c#
asp.net-mvc
razor
DK ALT
fonte
fonte
Respostas:
Algo assim pode funcionar ...
Conforme mencionado nos comentários abaixo, use o acima com o conhecimento de que, embora isso possa responder à sua pergunta, pode não resolver o seu problema . Dependendo do seu problema, esta pode ser a solução, mas eu não descartaria completamente o acesso ao banco de dados duas vezes.
fonte
:)
Isso funcionou para mim
fonte
Recomendo algo nesse sentido, mesmo que a imagem viva dentro do seu modelo.
Sei que você está pedindo uma maneira direta de acessar diretamente do modo de exibição e muitos outros responderam e disseram o que há de errado com essa abordagem, então esta é apenas outra maneira que carregará a imagem de forma assíncrona para você e eu acho que é uma abordagem melhor.
Modelo de amostra:
Método de amostra no controlador:
Visão
fonte
Uma maneira é adicionar isso a uma nova classe c # ou classe HtmlExtensions
então você pode fazer isso em qualquer vista
fonte
Se você pode codificar seus bytes em base 64, pode tentar usar o resultado como sua fonte de imagem. Em seu modelo, você pode adicionar algo como:
E na sua opinião:
fonte
Se a imagem não for tão grande, e se houver uma boa chance de você reutilizá-la com frequência, e se você não tiver muitas delas e se as imagens não forem secretas (o que significa que não é grande negócio se um usuário pudesse ver a imagem de outra pessoa) ...
Muitos "se" estão aqui, então há uma boa chance de que seja uma má ideia:
Você pode armazenar os bytes da imagem
Cache
por um curto período de tempo e fazer uma tag de imagem apontada para um método de ação, que por sua vez lê do cache e expele sua imagem. Isso permitirá que o navegador armazene a imagem em cache de maneira adequada.Isso tem o benefício adicional (ou é uma muleta?) De funcionar em navegadores mais antigos, onde as imagens embutidas não funcionam no IE7 (ou IE8 se maior que 32kB).
fonte
Esta é uma versão modificada da resposta de Manoj que uso em um projeto. Acabei de atualizar para pegar uma classe, atributos html e usar o TagBuilder.
Que pode ser usado da seguinte maneira:
fonte
Você precisa ter um byte [] em seu banco de dados.
Meu byte [] está em meu objeto Person:
Você precisa converter seu byte [] em uma String. Então, eu tenho em meu controlador:
Em seguida, em meu arquivo .cshtml, meu Model é um ViewModel. Isso é o que eu tenho em:
Eu o uso assim no meu arquivo .cshtml:
"data: image / image file extension ; base64, {0}, sua imagem String "
Eu desejo que ajude alguém!
fonte
Se você deseja apresentar a imagem, adicione um método como uma classe auxiliar ou ao próprio modelo e permita que o método converta a imagem da matriz de bytes em um formato de imagem como PNG ou JPG e então converta para a string Base64. Depois de ter isso, vincule o valor base64 em sua visualização no formato
"data: image / [extensão de tipo de arquivo de imagem] ; base64, [sua string base64 vai aqui] "
O acima é atribuído ao atributo
img
da tagsrc
.O único problema que tenho com isso é a string base64 ser muito longa. Portanto, eu não o recomendaria para vários modelos sendo mostrados em uma visualização.
fonte
Criei um método auxiliar com base no asnwer abaixo e estou muito feliz que este auxiliar possa ajudar o máximo possível.
Com um modelo:
O ajudante é:
A visualização está recebendo um objeto: ICollection, então você precisa usá-lo na visualização em uma instrução foreach:
fonte