2009-12-11 3 views
0

HI,asp.net image в форме и HTTPPost

Я уверен, что мне не хватает чего-то очень очевидного здесь, поэтому, пожалуйста, простите меня.

  • Я использую MVC 2 Beta и у меня есть модель, которая имеет несколько свойств, строки, Интс и т.д. обычный материал.
  • Он также имеет массив байтов, который содержит изображение.
  • У меня есть метод действия редактирования на моем контроллере, украшенный атрибутом [HTTPGet].
  • Метод передает модель в представление, которое представляет собой форму, которая имеет обычные текстовые поля, которые связываются с различными строковыми свойствами, и элемент img, связанный с массивом/изображением байтов.

Это все работает так, как должно быть, и я вижу все данные, включая изображение. Это все довольно стандартный материал.

Но когда пользователь отправляет форму в мою [HTTPPost] версию метода действия, которая принимает ту же модель, что и ее параметр, свойство изображения равно null. то есть свойство изображения не является частью привязки модели.

В обычном ходе событий мы выполняем некоторую проверку и передаем модель обратно в визуализируемое представление, чтобы пользователь мог видеть, были ли изменения успешными или нет. Но просто передав модель обратно «как есть» - представление не отображает изображение снова, потому что его больше нет в модели.

Я знаю, что могу пойти и получить изображение снова (из базы данных или где-либо) и положить его обратно в модель, прежде чем передать его мнению, но является то, что право stratergy или я что-то пропустил?

С уважением, Саймон

ответ

0

Как вы сделать изображение, которое содержится в виде двоичных данных в модели? Используете ли вы классические элементы управления веб-формами (что не будет повторяться в терминологии mvc)? В любом случае, если изображение отображается только в представлении, оно не отправляется, когда пользователь отправляет форму, потому что на сервер отправляются только поля ввода (флажки, текстовые поля, hiddens). элемент изображения нет. Помните, что в MVC простой HTML выполняет всю работу по отправке данных на сервер - нет никакого режима просмотра и автоматического возврата, который будет сохранять состояние элементов управления. У вас есть два решения:

  1. Кодировать двоичные данные в некотором скрытом поле, чтобы оно было опубликовано снова.
  2. (лучше) Не отправляйте данные изображения взад и вперед между клиентом и сервером, но обнаруживайте, предоставил ли пользователь новое изображение (я ожидаю, что вы будете использовать файл для ввода), и если пользователь оставил входной файл пустым затем обновите модель с изображением, уже сохраненным в базе данных, чтобы отобразить его снова. В противном случае обновите изображение в базе данных.

В любом случае, мне любопытно, как вы отображаете изображение из двоичных данных в модели. Я думаю, было бы проще создать какое-то действие контроллера, которое вернет двоичные данные, чтобы вы могли использовать URL-адрес этого действия в атрибуте src тега img или хранить изображения в виде файлов и использовать их URL вместо двоичных данных.

+0

Pan, Спасибо за разъяснение относительно элементов изображения.Имеет смысл, что данные изображения не отправляются назад. Когда я посмотрел более внимательно на свой код, я делал это так, как вы предложили использовать метод действия контроллера как источник тега изображения. Я должен был внимательно изучить мой код, прежде чем публиковать вопрос (смущенный). Но еще раз спасибо за ваш ответ. –