Отображение изображения из db в Razor/MVC3

У меня есть таблица в db, которая имеет следующее: - 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;
        }
    }

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

Что я делаю неправильно?

Заранее благодарим за помощь и время.

ОБНОВЛЕНИЕ

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

        <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;
        }
    }

но когда я пытаюсь отладить код, ActionResult GetImage не попадает

Ответ 1

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

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

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.