2009-12-11 4 views
0

HI,asp.net image sous une forme et HTTPPost

Je suis sûr que je manque quelque chose de très évident ici, alors s'il vous plaît pardonnez-moi.

  • J'utilise MVC 2 Beta et j'ai un modèle qui a plusieurs propriétés, chaînes, etc. ints les trucs habituels.
  • Il a également un tableau d'octets qui contient une image.
  • J'ai une méthode d'action de modifier sur mon contrôleur décoré avec un attribut [HttpGet].
  • Le procédé passe par le modèle à la vue qui est une forme qui a les zones de texte habituels qui se lient aux diverses propriétés de chaîne et un élément img qui est lié à la matrice octet/image.

Tout cela fonctionne comme il se doit et je vois toutes les données, y compris l'image. Tout cela est assez standard.

Mais lorsque l'utilisateur soumet le formulaire à mon [HttpPost] version de la méthode d'action qui accepte le même modèle que son paramètre la propriété d'image est nulle. c'est-à-dire que la propriété d'image ne semble pas faire partie de la liaison de modèle.

Dans le cours normal des événements que nous ferions une validation et de transmettre le modèle retour à la vue d'être rendu afin que l'utilisateur peut voir si les modifications étaient la réussite ou non. Mais juste en passant le modèle en arrière "tel quel" - la vue ne rend pas l'image à nouveau car elle n'est plus dans le modèle.

Je sais que je peux aller chercher à nouveau l'image (à partir de la base de données ou si jamais) et le remettre dans le modèle avant de passer à la vue, mais est que le droit stratergy ou ai-je manqué quelque chose?

Cordialement, Simon

Répondre

0

Comment rendre l'image qui est contenue sous forme de données binaires dans le modèle? Utilisez-vous des contrôles webforms classiques (ce qui ne serait pas recomprimé dans la terminologie mvc)? De toute façon, si l'image n'est affichée que dans la vue, elle n'est pas publiée lorsque l'utilisateur soumet le formulaire, car seuls les champs de saisie (cases à cocher, champs de texte, hiddens) sont envoyés au serveur. l'élément d'image ne l'est pas. Rappelez-vous que dans MVC, c'est du HTML simple qui fait tout le travail de publication de données sur le serveur - il n'y a pas de viewstate ni de postback automatique qui va maintenir l'état des contrôles. Vous avez deux solutions:

  1. Encodez des données binaires dans un champ masqué afin qu'elles soient à nouveau affichées.
  2. (mieux) Ne pas envoyer les données d'image et-vient entre le client et le serveur, mais détecter si l'utilisateur a fourni nouvelle image (i vous attends wolud utiliser le fichier d'entrée pour cela) et si l'utilisateur a quitté l'entrée de fichier vide puis mettez à jour le modèle avec l'image déjà stockée dans la base de données pour l'afficher à nouveau. Sinon, mettez à jour l'image dans la base de données.

Quoi qu'il en soit, je suis curieux de savoir comment afficher l'image à partir de données binaires dans le modèle. Je pense qu'il serait plus simple de créer une action de contrôleur qui retournerait des données binaires afin que vous puissiez utiliser l'URL de cette action dans l'attribut src de la balise img, ou stocker des images comme fichiers et utiliser leur URL plutôt que des données binaires.

+0

Pan, Merci pour les précisions concernant les éléments d'image.Il est logique que les données d'image ne soient pas renvoyées. Quand j'ai regardé de plus près mon code, je l'ai fait comme vous l'avez suggéré en utilisant une méthode d'action du contrôleur comme source de l'étiquette d'image. J'aurais dû regarder mon code de plus près avant de poster la question (embarrassée). Mais merci encore pour votre réponse. –

Questions connexes