2013-12-12 4 views
0

Вот моя модельне смог показать изображение

public class MyModel 
{ 
    public System.Drawing.Image MyImage    { get; private set; } 

    public MyModel(System.Drawing.Image myImage) 
    { 
     this.MyImage    = myImage; 
    } 
} 

Вот мой взгляд

@model MyModel 
@using MyNamespace.MyModels;   
@{ 
    ViewBag.Title = "title"; 
} 
<img id="11111" src="@Model.MyImage" alt="Hello alt text" /> 

Вот мой контроллер

public class MyController : Controller 
{ 
    public ActionResult Index() 
    { 
     Image img = GoAndGetImage(55); 
     MyModel model = new MyModel(img); 
     return View(model); 
    } 

    private System.Drawing.Image GoAndGetImage(int id) 
    { 
      // Retrieve bytesArray from sql db, convert to System.Drawing.Image type 
    } 
} 

Но я только получаю, чтобы увидеть Привет альт текст, а не реальное изображение. Что я делаю не так?

+1

Прочтите исходный код. Вам нужно использовать 'data:' URI или сделать отдельный HTTP-запрос. – SLaks

ответ

1

Атрибут src должен быть URL-адресом, указывающим на местоположение файла изображения, а не объект типа System.Drawing.Image.

Измените свой тип MyImage на String, установите его на относительный (или абсолютный) путь к месту нахождения файла изображения и посмотрите, работает ли он.

+0

Я просто читаю это изображение из базы данных; поэтому его нет в файле, расположенном в файловой системе –

+0

Если он хранится в блобе в базе данных, вам, скорее всего, придется сохранить его в виде файла, прежде чем вы сможете его отобразить. См. Ответ от @Simon - вы можете отображать его без сохранения. –

2

Вы пытаетесь передать фактическое физическое растровое изображение из памяти .. на страницу. Это не сработает.

Вам нужно либо:

а) передать строку пути к файлу. То есть:

this.MyImage = "/your/path/to/file.jpg"; 

... и ...

src="@Model.MyImage" 

б) Base64 кодирования изображения и свалка, что на странице:

this.MyImage = base64String(ImageObject); 

... и ...

src="data:image/jpeg;base64,@Model.MyImage" 

В любом случае .. MyImage должен быть стри нг.

Вот пример преобразования изображения в памяти в base64: Converting image to base64

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

+0

Я верю, что существуют ограничения браузера со вторым решением. Также изображение не кэшируется. Ему лучше пойти с первым. –

+0

Список браузеров, которые его не поддерживают, в наши дни довольно мал. Если не требуется поддерживать действительно старые браузеры, все должно быть хорошо. –

Смежные вопросы