Pergunta

HI,

Eu tenho certeza que estou perdendo algo muito óbvio aqui, então por favor me perdoe.

  • Eu estou usando MVC 2 Beta e eu tenho um modelo que tem várias propriedades, cordas, ints etc. as coisas de sempre.
  • também tem uma matriz de byte que contém uma imagem.
  • Eu tenho um método de ação editar no meu controlador decorado com um atributo [HttpGet].
  • O método passa o modelo para a visualização que é uma forma que tem as caixas de texto usuais que se ligam às diferentes propriedades de cadeia e um elemento img que está ligado à matriz de bytes / imagem.

Esta tudo funciona como deveria e eu vejo todos os dados, incluindo a imagem. Isso é tudo coisa bastante normal.

Mas quando o usuário envia o formulário para a minha versão [HttpPost] do método de ação que aceita o mesmo modelo como parâmetro a propriedade imagem é nulo. ou seja, a propriedade imagem não parecem ser parte do modelo de ligação.

No curso normal dos acontecimentos que faríamos alguma validação e passar o modelo de volta para o fim de ser processado para que o usuário pode ver se as edições foram bem sucedida ou não. Mas apenas passando o modelo de volta "como é." - a visão não torna a imagem novamente porque a sua não no modelo

Eu sei que posso ir e obter novamente a imagem (do banco de dados ou onde nunca) e colocá-lo de volta no modelo antes de passá-lo para a vista, mas é que o stratergy certo ou eu perdi alguma coisa ?

Saudações, Simon

Foi útil?

Solução

Como você processar a imagem que está contido como dados binários em modelo? Você usa controles webforms clássicos (o que não seria recomded na terminologia MVC)? De qualquer forma, se a imagem é exibida apenas na vista que não é lançado quando o usuário envia o formulário, porque apenas campos de entrada (caixas de seleção, campos de texto, hiddens) são submetidos ao servidor. elemento de imagem não é. Lembre-se que no MVC é HTML simples fazer todo o trabalho de dados de lançamento para o servidor - não há viewstate nem postback automático que irá persistir o estado dos controles. Você tem duas soluções:

  1. Encode dados binários em algum campo escondido de modo que seria postado novamente.
  2. (melhor) Não envie parte de trás de dados de imagem e para trás entre o cliente eo servidor, mas detectar se o usuário forneceu nova imagem (i esperam que você wolud usar arquivo de entrada para isso) e se o usuário deixou a entrada de arquivo vazio em seguida, atualizar o modelo com a imagem já armazenada no banco de dados para exibi-la novamente. atualizar Caso contrário, a imagem no banco de dados.

De qualquer forma, eu sou curioso como você mostrar uma imagem a partir de dados binários em modelo. Eu acho que seria mais simples para criar alguma ação do controlador que voltaria dados binários para que você possa usar URL dessa ação no atributo src da tag img, ou armazenar imagens como arquivos e usar sua URL em vez de dados binários.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top