Я возвращаю набор данных из моей базы данных MS SQL 2008R2, который содержит данные, из которых я уже получаю данные в моем представлении Razor.Я добавил поле byte [], содержащее миниатюру изображения, которую я пытаюсь отобразить в этом представлении.
Поскольку байтовый массив относительно мал, я решил попробовать отобразить встроенный байтовый массив.Тем не менее, после прочтения могут возникнуть некоторые проблемы, связанные с браузером, я отказался от этого.
Создание метода контроллера казалось правильным (оба метода были найдены здесь ), однако у меня уже естьбайтовый массив готов к использованию, и мне не нужно делать еще один вызов БД, чтобы получить его на основе идентификатора.
Выполнение этого не работает по понятным причинам:
... отображение других данных на странице ....
@if (Model.dsResults.Tables[0].Rows[i]["ImageBytes"] == null)
{
<img src="@Url.Content("~/Content/Images/NoPhoto.png")" border="0" />
}
else
{
<img src="@Url.Action("GetImage", "SearchResults", new { imageBytes = Model.dsResults.Tables[0].Rows[i]["ImageBytes"] })" alt="Product Image" />
}
...
Метод контроллера:
[Authorize]
[AcceptVerbs(HttpVerbs.Get)]
public ActionResult GetImage(byte[] imageBytes)
{
byte[] byteArray = imageBytes;
return new FileContentResult(byteArray, "image/jpeg");
}
... как это по существупытается отправить байтовый массив через http.
Итак, мой вопрос, поскольку у меня уже есть байтовый массив в моем представлении Razor, как его отобразить?
-- Обновление -
Я понимаю, что выполнять обработку в представлении не рекомендуется, но поскольку данные уже есть, не может быть сделано что-то подобное:
Response.Write((byte[])Model.dsResults.Tables[0].Rows[i]["ImageBytes"]);
Или ...
Stream s = new MemoryStream(((byte[])Model.dsResults.Tables[0].Rows[i]["ImageBytes"]));
System.Drawing.Image img = new System.Drawing.Bitmap(s);
В других публикациях я читал, что вы делаете Response.Write (byte [] ...)), но это не работает, яВ этом случае.
- UPADATE -
В моем продолжающемся поиске эффективности (без необходимости делать еще один запрос к БД) помощник WebImage кажетсябыть хорошим кандидатом.Один из его конструкторов примет байтовый массив для инициализации класса, затем, используя метод .Write ("jpeg"), я могу увидеть изображение.
<td>
@{
WebImage webImage = new WebImage(((byte[])Model.dsResults.Tables[0].Rows[i]["ImageBytes"]));
webImage.Write("jpeg");
}
</td>
Проблема с использованием WebImage.Write ()является то, что когда-то используется, изображение является единственным, что отображается на странице.Есть ли способ сделать это непосредственно для «элемента управления» на странице просмотра Razor?
- ОБНОВЛЕНИЕ -
Это продолжает меня беспокоить ...поэтому я попробовал следующее, которое, как мне показалось, может сработать, поскольку именно это мы и делаем из Action ...
if (Model.dsResults.Tables[0].Rows[i]["ImageBytes"] != DBNull.Value)
{
var img1 = new FileContentResult(((byte[])Model.dsResults.Tables[0].Rows[i]["ImageBytes"]), "image/jpeg");
<text>
<img src="@new FileContentResult(((byte[])Model.dsResults.Tables[0].Rows[i]["ImageBytes"]), "image/jpeg")" />
</text>
}
... не работает.