Как отобразить изображение, используя данные из ViewData.Model [вместо того, чтобы брать данные из удаленного местоположения, используя, например, Url.Action] - PullRequest
2 голосов
/ 06 июля 2010

Я делаю своего рода приложение-мастер, которое собирает информацию о контактах. Таким образом, перед сохранением в БД все данные, собранные в процессе, сохраняются в памяти как свойства модели (с использованием сериализация / десериализация ). Собранные данные включают в себя загруженную фотографию контакта. Последняя страница называется « preview », где я отображаю всю информацию, введенную во время процесса, перед сохранением их в БД. На этой странице предварительного просмотра я также хотел бы отобразить фотографию контакта слева и его информацию справа.

Изображение легче отобразить, используя следующие операторы

<img src = ".../.../Content/MyPicture" />

<img src = "<% = Url.Action("Action", "Controller", "routevalue")%>"/>

Как насчет того, если данные расположены не в удаленных местах, как в приведенных выше примерах, а в ViewData.Model ?

Кстати, моя модель ContactData имеет 2 свойства ImageData и ImageMimeType , в которых хранятся данные для изображения. Как мне их использовать?

Спасибо за помощь

Ответы [ 2 ]

1 голос
/ 06 июля 2010

Обычно вы сохраняете его в переменной сеанса, а когда приходит запрос на изображение, вы передаете его всему, что находится в сеансе. Есть несколько вещей, которые должны работать для того, чтобы это функционировало, но обычно это работает.

Существует еще одна опция: если изображение маленькое, вы можете вставить его непосредственно в документ, используя data uri , например:

<img src="data:image/png;base64,
iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAABGdBTUEAALGP
C/xhBQAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9YGARc5KB0XV+IA
AAAddEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIFRoZSBHSU1Q72QlbgAAAF1J
REFUGNO9zL0NglAAxPEfdLTs4BZM4DIO4C7OwQg2JoQ9LE1exdlYvBBeZ7jq
ch9//q1uH4TLzw4d6+ErXMMcXuHWxId3KOETnnXXV6MJpcq2MLaI97CER3N0
vr4MkhoXe0rZigAAAABJRU5ErkJggg==" />

(пример украден из википедии, вставьте uri в адресную строку, и он покажет вам изображение красной точки). Вам нужно будет base64 кодировать двоичные данные (или url-кодировать, но base64 обычно предпочтительнее для двоичных данных).

0 голосов
/ 08 июля 2010

Косуля,

Мне потребовалось 2 дня и много разочарований, чтобы просто понять, что вы имели в виду, сохраняя данные в переменной состояния сеанса.Во всяком случае, ниже это решение для каждого, чтобы воспользоваться.

Сначала я поместил данные, необходимые для отображения, в переменные состояния сеанса

public ActionResult PreviewPage()
{
  Session["ImageData"] = contactData.ImageData;
  Session["ImageMimeType"] = contactData.ImageMimeType;
  return View(contactData); 
}

Я также создал метод действия для отправки данных для просмотра.Здесь все волшебство сделано.Это действие собирает данные, содержащиеся в переменных Session

public FileContentResult GetImage()
{
  return File((byte[]Session["ImageData"], (string)Session["ImageMimeType"]);
}

Наконец, так я вижу доступ к этим данным без необходимости извлекать необходимые данные из базы данных.

<img src = "<% = Url.Action("GetImage", "Contact")%>" />

Это было важночто я смогу понять, как это работает, потому что в будущем я буду делать больше приложений, подобных Wizards.

Большое спасибо за помощь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...