В БД на MSSQL есть таблица с документами. Каждый документ имеет картинку, ассоциированную с ним. Она хранится в поле image. Есть сайт на SharePoint, в нем на главной странице надо отобразить список документов, изменившихся за последнюю неделю. Точнее превью этих документов: эту картинку и часть текста. Этот список формируется в web-части, помещенной на главной странице. Т.о. мы имеем следующий метод web-части, который нужно реализовать:
protected override void RenderWebPart(HtmlTextWriter writer)
{
...
}
Чтобы отобразить на месте web-части список с превьюшками, нужно записать во writer
соответствующую html-разметку. Скажем, у меня есть набор данных с сервера с теми самыми изменившимися документами. Среди прочих полей там есть поле с картинкой (типа image) и поле с текстом документа.
п.с. Прочитал вот эту статью про создание HttpHandler
'а, но это не подходит наверное, т.к. хэндлер вынужден самостоятельно в базу лезть за бинарными данными, а у меня они уже есть. Передавать их параметром не вариант, создание глобального словаря с картинками - тоже неклево.
Так картинка и так в отдельном поле хранится.
Ну тогда можно и обычный
HttpHandler
использовать. Не очень красиво архитектурно, но работать будет)Ну, то есть внешний словарь [id, картинка];, который заполняется, скажем, в
RenderWebPart
. Там же формируется html-содержимое на выход, в котором используются обычные теги<img src="photo.aspx?id=10">
. Затем вHttpHandler
'е лезем в заполненный словарь и вытаскиваем оттуда бинарные данные картинки. Так?Можно так. А можно брать не из словаря а напрямую из базы. Из словаря, конечно, будет быстрее, но будет заниматься память и еще придётся держать синглтон, для хранения этого словаря. Также метод
RenderWebPart
вызывается каждый раз при обновлении страницы, поэтому словарь должен быть потокобезопасным.Да просто не хотелось бы в базу лезть так часто
Можно сделать сохранение картинки во временную папку на диске. И время от времени очищать.