отображение изображения из БД в Razor / MVC3 - PullRequest
11 голосов
/ 05 февраля 2012

У меня есть таблица в БД, которая имеет следующее: - CountryID, CountryName и CountryImage.

Теперь я пытаюсь отобразить изображение в индексе, и у меня есть следующее в представлении: -

        <td>
        @if (item.Image != null)
        {
            <img src="@Model.GetImage(item.Image)" alt="@item.CountryName"/>    
        }

и затем в ViewModel у меня есть: -

        public FileContentResult GetImage(byte[] image)
    {
        if (image != null)
            return new FileContentResult(image, "image/jpeg");
        else
        {
            return null;
        }
    }

Однако я не вижу изображение должным образом.

Что я делаю не так?

Заранее спасибо за помощь и время

UPDATE

Хорошо. Итак, я реализовал следующее в представлении: -

        <td>
        @if (item.Image != null)
        {
            <img src="@Url.Action("GetImage", "CountryController", new { id = item.CountryID })" alt="@item.CountryName" />             
        }
    </td>

и в CountryController: -

        public ActionResult GetImage(int id)
    {
        var firstOrDefault = db.Countries.Where(c => c.CountryID == id).FirstOrDefault();
        if (firstOrDefault != null)
        {
            byte[] image = firstOrDefault.Image;
            return File(image, "image/jpg");
        }
        else
        {
            return null;
        }
    }

но когда я пытаюсь отладить код, GetRmage ActionResult не срабатывает

1 Ответ

18 голосов
/ 05 февраля 2012

Две возможности.

Напишите действие контроллера, которое вместо данного идентификатора изображения вернет это изображение:

public ActionResult GetImage(int id)
{
    byte[] image = ... go and fetch the image buffer from the database given the id
    return File(image, "image/jpg");
}

, а затем:

<img src="@Url.Action("GetImage", "SomeController", new { id = item.Id })" alt="@item.CountryName" /> 

Очевидно, что теперь в вашей исходной модели вы надеваетене нужно свойство Image.Это будет впоследствии найдено в действии контроллера, ответственном за это.


Другая возможность состоит в использовании схемы URI данных для встраивания изображений в виде строк base64, но это может не поддерживаться широковсеми браузерами:

<img src="data:image/jpg;base64,@(Convert.ToBase64String(item.Image))" alt="@item.CountryName" />

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

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