Frage

HALLO,

Ich bin mir sicher, dass mir hier etwas sehr Offensichtliches entgangen ist, also bitte verzeihen Sie mir.

  • Ich benutze MVC 2 Beta und ich habe ein Modell, das mehrere Eigenschaften, Strings, Ints usw. hat.das übliche Zeug.
  • Es verfügt außerdem über ein Byte-Array, das ein Bild enthält.
  • Ich habe eine Bearbeitungsaktionsmethode auf meinem Controller, die mit einem [HTTPGet]-Attribut versehen ist.
  • Die Methode übergibt das Modell an die Ansicht, bei der es sich um ein Formular handelt, das die üblichen Textfelder enthält, die an die verschiedenen Zeichenfolgeneigenschaften gebunden sind, und ein img-Element, das an das Byte-Array/Bild gebunden ist.

Das funktioniert alles wie es soll und ich sehe alle Daten, einschließlich des Bildes.Das ist alles ziemlich normales Zeug.

Wenn der Benutzer das Formular jedoch an meine [HTTPPost]-Version der Aktionsmethode sendet, die dasselbe Modell als Parameter akzeptiert, ist die Bildeigenschaft null.d.h.Die Bildeigenschaft scheint nicht Teil der Modellbindung zu sein.

Im Normalfall würden wir eine gewisse Validierung durchführen und das Modell zum Rendern an die Ansicht zurückgeben, damit der Benutzer sehen kann, ob die Änderungen erfolgreich waren oder nicht.Wenn Sie das Modell jedoch „wie es ist“ zurückgeben, rendert die Ansicht das Bild nicht erneut, da es nicht mehr im Modell enthalten ist.

Ich weiß, dass ich das Bild erneut abrufen kann (aus der Datenbank oder wo auch immer) und es wieder in das Modell einfügen kann, bevor ich es an die Ansicht übergebe, aber Ist das die richtige Strategie oder habe ich etwas übersehen??

Grüße, Simon

War es hilfreich?

Lösung

Wie rendern Sie das Bild, das als Binärdaten im Modell enthalten ist?Verwenden Sie klassische Webforms-Steuerelemente (was in der MVC-Terminologie nicht empfohlen wird)?Wenn das Bild jedoch nur in der Ansicht angezeigt wird, wird es nicht gepostet, wenn der Benutzer das Formular absendet, da nur Eingabefelder (Kontrollkästchen, Textfelder, ausgeblendete Felder) an den Server gesendet werden.Bildelement ist nicht.Denken Sie daran, dass in MVC einfaches HTML die gesamte Arbeit zum Posten der Daten auf dem Server erledigt – es gibt weder einen Ansichtsstatus noch ein automatisches Postback, das den Status der Steuerelemente beibehält.Sie haben zwei Lösungen:

  1. Codieren Sie Binärdaten in einem versteckten Feld, damit sie erneut veröffentlicht werden.
  2. (besser) Senden Sie die Bilddaten nicht zwischen dem Client und dem Server hin und her, sondern erkennen Sie, ob der Benutzer ein neues Bild bereitgestellt hat (ich gehe davon aus, dass Sie dafür die Dateieingabe verwenden würden) und ob der Benutzer die Dateieingabe leer gelassen hat, dann aktualisieren Sie das Modell mit dem bereits in der Datenbank gespeicherten Bild, um es erneut anzuzeigen.Andernfalls aktualisieren Sie das Bild in der Datenbank.

Wie auch immer, ich bin neugierig, wie man Bilder aus Binärdaten im Modell anzeigt.Ich denke, es wäre einfacher, eine Controller-Aktion zu erstellen, die Binärdaten zurückgibt, sodass Sie die URL dieser Aktion im src-Attribut des IMG-Tags verwenden oder Bilder als Dateien speichern und deren URL anstelle von Binärdaten verwenden könnten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top